Dim lt As Integer
Dim c As Object
Dim myKey As String, fAddress As String
With Sheets("管理用シート")
WrkRow = .Cells(Rows.Count, 1).End(xlUp).Row '最終行
End With
UserForm11.Label110.Caption = it
With Worksheets("管理用シート")
UserForm11.Label139.Caption = it '行番号
myKey = .Cells(it, 23).Value
With Worksheets("管理用シート").Range("w1:w" & WrkRow)
Set c = .Find(What:=myKey, LookIn:=xlValues, lookat:=xlWhole, _
SearchOrder:=xlByColumns, MatchByte:=False)
If Not c Is Nothing Then
fAddress = c.Address
Do
Set c = .FindNext(c)
If c.Address = fAddress Then Exit Do
Loop
End If
End With
end with
EXCEL VBAのことですが、
途中までかけたのですが全然わからなくなってしまったのでお願いします。
1.セルをダブルクリックして、その行番号を取得
2.cells(ダブルクリックした行番号,23)に入っているデータを取得
3.その列("w1:w" & WrkRow)に入っているデータとの一致を調べ、行番号を取得
4.ダブルクリックした以外の行番号の1行をデータ取得
するようなプログラムを書きたいのですが、
思うようにかけないのでこのプログラムで分かる方は教えて下さい
管理用シートのマクロとしてください。
デバッグしてませんのでデバッグはお願いします。
http://www.eurus.dti.ne.jp/yoneyama/Excel/vba/vba_event.html
' http://www.eurus.dti.ne.jp/yoneyama/Excel/vba/vba_event.html Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim lastRow As Long Dim c As Object lastRow = Cells(Rows.Count, 1).End(xlUp).Row '最終行 UserForm11.Label110.Caption = Target.Row UserForm11.Label139.Caption = Target.Row '行番号 With Cells(1, Target.Column).Resize(lastRow) Set c = .Find(What:=Target.Value, LookIn:=xlValues, lookat:=xlWhole, _ SearchOrder:=xlByColumns, MatchByte:=False) If Not c Is Nothing And c.Address = Target.Address Then ' 最初の一致がダブルクリックしたセルだったら二番目のセルを取得 Set c = .FindNext(c) End If End With If Not c Is Nothing And c.Address <> Target.Address ' 最初か二番目のセルがダブルクリックした以外のセルだったら ' c = ダブルクリックした以外のセル Range(Cells(c.Row, 1), Cells(c.Row, Columns.Count).End(xlToRight)) ' 1行選択 End If Cancel = false ' セルの編集はしない End Sub
管理用シートのマクロとしてください。
デバッグしてませんのでデバッグはお願いします。
http://www.eurus.dti.ne.jp/yoneyama/Excel/vba/vba_event.html
' http://www.eurus.dti.ne.jp/yoneyama/Excel/vba/vba_event.html Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim lastRow As Long Dim c As Object lastRow = Cells(Rows.Count, 1).End(xlUp).Row '最終行 UserForm11.Label110.Caption = Target.Row UserForm11.Label139.Caption = Target.Row '行番号 With Cells(1, Target.Column).Resize(lastRow) Set c = .Find(What:=Target.Value, LookIn:=xlValues, lookat:=xlWhole, _ SearchOrder:=xlByColumns, MatchByte:=False) If Not c Is Nothing And c.Address = Target.Address Then ' 最初の一致がダブルクリックしたセルだったら二番目のセルを取得 Set c = .FindNext(c) End If End With If Not c Is Nothing And c.Address <> Target.Address ' 最初か二番目のセルがダブルクリックした以外のセルだったら ' c = ダブルクリックした以外のセル Range(Cells(c.Row, 1), Cells(c.Row, Columns.Count).End(xlToRight)) ' 1行選択 End If Cancel = false ' セルの編集はしない End Sub
ワークシートにコードを書いて、イベント処理してみては?
>1.セルをダブルクリックして、その行番号を取得
Excel VBA セルをダブルクリックして その行番号を取得 - YouTube
シート名のところで、右クリックを押してコード表示を選択。
すると、シートにコード(イベント)が書けるので、
BeforeDoubleClickに処理を書いてみます。
.
Targetで対象のオブジェクトが引数で渡されるので、
.Rowで行番号を取得
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
MsgBox Target.Row
End Sub
>2.cells(ダブルクリックした行番号,23)に入っているデータを取得
応用?して、
'cells(ダブルクリックした行番号,23)に入っているデータを取得
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
MsgBox Cells(Target.Row, 23)
End Sub
↑こんな感じで ダブルクリックした行番号,23の値が取得できます。
ここから先、読めなかったのが(すみません、私の読解力不足で仕様を読みきれませんでした)
>3.その列("w1:w" & WrkRow)に入っているデータとの一致を調べ、行番号を取得
>4.ダブルクリックした以外の行番号の1行をデータ取得
次は、Wの列 で データを探し、>ダブルクリックした以外の行番号の1行をデータ取得< で、どのデータを返すのか?
読み切れなかったです。
中途半端な回答ですが、もし、シートにコードを書いていいなら、
Worksheet_BeforeDoubleClick
で .row 行が取得できるので、使ってみてください。
コメント(0件)