人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

●質問者: たつ
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● TransFreeBSD
ベストアンサー

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

2 ● ken3memo

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

>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 行が取得できるので、使ってみてください。

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ