Dim dt As Variant

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行をデータ取得

するようなプログラムを書きたいのですが、
思うようにかけないのでこのプログラムで分かる方は教えて下さい

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2011/11/21 12:31:29

ベストアンサー

id:TransFreeBSD No.1

回答回数668ベストアンサー獲得回数268

管理用シートのマクロとしてください。
デバッグしてませんのでデバッグはお願いします。
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件)

id:TransFreeBSD No.1

回答回数668ベストアンサー獲得回数268ここでベストアンサー

管理用シートのマクロとしてください。
デバッグしてませんのでデバッグはお願いします。
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
id:ken3memo No.2

回答回数317ベストアンサー獲得回数115

ワークシートにコードを書いて、イベント処理してみては?

>1.セルをダブルクリックして、その行番号を取得


Excel VBA セルをダブルクリックして その行番号を取得 - YouTube
D

シート名のところで、右クリックを押してコード表示を選択。
すると、シートにコード(イベント)が書けるので、
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 行が取得できるので、使ってみてください。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません