Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


9992 / 13644 ツリー ←次へ | 前へ→

【24371】ウッシさんお願いします! yayoi 05/4/20(水) 18:35 質問[未読]
【24376】Re:ウッシさんお願いします! ウッシ 05/4/20(水) 20:54 発言[未読]
【24378】Re:ウッシさんお願いします! yayoi 05/4/20(水) 21:13 質問[未読]
【24385】Re:ウッシさんお願いします! ウッシ 05/4/20(水) 22:18 回答[未読]
【24386】Re:ウッシさんお願いします! yayoi 05/4/20(水) 22:25 お礼[未読]
【24400】Re:ウッシさんお願いします! G-Luck 05/4/21(木) 14:42 発言[未読]

【24371】ウッシさんお願いします!
質問  yayoi  - 05/4/20(水) 18:35 -

引用なし
パスワード
   先日、「さっぱりわかりません」の質問でウッシさんから的確な回答をして頂き大変感謝していた者です。実は、あれからもう一つ問題が・・・ずうずうしいですがもう一度回答して下さると助かります。 
前回のVBAを行ごとに変えることはできるでしょうか?
例えば1行目はD列がウィンドウ枠にかかると変化する。2行目はE列とH列で2度変化するという具合に。
自分でも試してみましてが、やはり、出来ませんでした・・・。
どうか温かい手を差しのべて下さい!!

【24376】Re:ウッシさんお願いします!
発言  ウッシ  - 05/4/20(水) 20:54 -

引用なし
パスワード
   こんばんは

>前回のVBAを行ごとに変えることはできるでしょうか?
>例えば1行目はD列がウィンドウ枠にかかると変化する。2行目はE列とH列で2度変化す>るという

「例えば」という話は要りません。

詳細を説明して下さい。

1行目、2行目が変化すると言ってもそれぞれの行のどの範囲をどう変化させるのか
全く分りません。

【24378】Re:ウッシさんお願いします!
質問  yayoi  - 05/4/20(水) 21:13 -

引用なし
パスワード
   ▼ウッシ さん:
説明が足りなくてすみません。

C列でウィンドウ枠の固定をします。そのC列には1行目から15行目まで人名が入ってます。D列からスクロールしていって、G列がウィンドウ枠にかかったときに1行目の名前が変化し、H列にかかったときに2行目が変化しI列にかかったときに3行目が変化し、というふうに行ごとに変えられるようにしていきたいのです。変更するための名前はシート2のどこにでも用意できます。

この説明でわかって頂けるでしょうか。どうぞよろしくお願いします。

【24385】Re:ウッシさんお願いします!
回答  ウッシ  - 05/4/20(水) 22:18 -

引用なし
パスワード
   こんばんは

まだ説明不足です。

>変更するための名前はシート2のどこにでも用意できます。
ではなくて、「こういうデータを使って」とシートのデータを掲示するのが質問者の
義務だと思っています。

>ブックモジュール
Private Sub Workbook_Open()
  flg = True
  Sheet_Scroll_1
End Sub

>標準モジュール
Option Explicit
Public flg As Boolean
Sub Sheet_Scroll_1()
  Dim cRng As Range
  Dim pRng As Range
  Dim i  As Long
  If ActiveSheet.Name = "Sheet1" Then
    Set cRng = Worksheets("Sheet2").Range("A1").CurrentRegion
    Set pRng = _
        ActiveWindow.Panes(ActiveWindow.Panes.Count).VisibleRange
    Application.ScreenUpdating = False
    With cRng.Columns(1)
      Range("C1").Resize(.Cells.Count).Value = .Value
    End With
    If pRng.Cells(1).Column > 6 Then
      With cRng.Columns(2).Cells(1).Resize(pRng.Cells(1).Column - 6)
        Range("C1").Resize(.Cells.Count).Value = .Value
      End With
    End If
    Application.ScreenUpdating = True
  End If
  DoEvents
  If flg = False Then Exit Sub
  Application.OnTime Now + TimeValue("00:00:01"), "Sheet_Scroll_1"
End Sub
Sub Stop_Sheet_Scroll_1()
  flg = False
End Sub
Sub ReStart_Sheet_Scroll_1()
  If flg = True Then Exit Sub
  flg = True
  Sheet_Scroll_1
End Sub

>Sheet2

  A    B
  甲さん  Gさん
  乙さん  Hさん
  丙さん  Iさん
  丁さん  Jさん
  戊さん  Kさん
  己さん  Lさん
  庚さん  Mさん
  辛さん  Nさん
  壬さん  Oさん
  癸さん  Pさん
  子さん  Qさん
  丑さん  Rさん
  寅さん  Sさん
  卯さん  Tさん
  辰さん  Uさん

【24386】Re:ウッシさんお願いします!
お礼  yayoi  - 05/4/20(水) 22:25 -

引用なし
パスワード
   ▼ウッシ さん:
至らなくて申し訳ありません。
質問する側にもマナーがありますよね、今回名指しまでして大変失礼致しました。
それでも回答して下さったことに、本当に感謝してます。
心から、有難うございました!

【24400】Re:ウッシさんお願いします!
発言  G-Luck  - 05/4/21(木) 14:42 -

引用なし
パスワード
   ▼yayoi さん:
相変わらず、エラー処理はしていません。

Sheet2に
B 田中 C 近藤 X 松田
B 伊藤
B 齊藤

てな感じで、A1から入力されているとして、
列位置を入力した場合は、必ず名前を入力してください。
空白を希望なら、スペースを入力してください。
列番は、アルファベットで、必ず順番に並べて入力してください。
OnTimeは使っていないので、下記コードは、Sheet1にコピーしてください。
セルの選択の変更で処理されます。
ウィンドウの固定をA列でしといてね。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Dim rg As Variant
  Dim Clm As Long
  Dim i As Long
  Dim j As Long
  Dim ChangeClm As Long
  
  rg = ThisWorkbook.Worksheets("Sheet2").Range("A1").CurrentRegion.Value
  Clm = ThisWorkbook.Windows(1).Panes(2).VisibleRange.Cells(1).Column
  
  Application.ScreenUpdating = False
  
  For i = LBound(rg, 1) To UBound(rg, 1)
    For j = LBound(rg, 2) To UBound(rg, 2) Step 2
      If rg(i, j) <> "" Then
        ChangeClm = Range(rg(i, j) & 1).Column
        If ChangeClm <= Clm Then
          Range("A" & i) = rg(i, j + 1)
        Else
          Exit For
        End If
      End If
    Next j
  Next i
  
  Application.ScreenUpdating = True
End Sub

9992 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free