- ベストアンサー
エクセルVBAについて教えてください
- エクセルVBAについて教えてください。エクセル2003での操作についても教えていただけると助かります。
- エクセルVBAを使用してSheet1とSheet2を操作する方法について教えてください。特にSheet2の2行目以降についてどのように作業すれば良いか教えていただけると嬉しいです。
- 以下のコードを使用して、Sheet2の2行目以降も同様の操作を行いたいのですが、どのように修正すれば良いのか分かりません。詳しい方法を教えていただけませんか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
> このコードをいじくってSheet2以降も同作業できるようにお願いします との事ですが、「以降」のシートはSheet1・2と同じフォーマットですか? だとしたら、同様に書いて、シートの名前を変えればOKです。 さて、意地悪はさておき。 > Sheet2の2行目以降も同作業をしたいのですが、、、 こちらが本題ですね。 ・・本題に入る前に、もう一つ意地悪を。 > Sheet2のG1をダブルクリックで とありますが、ご提示のコード > With Target > If .Address = "$F$1" Then > UserForm1.Show > ElseIf .Address = "$H$1" Then > 省略 これしか「起動するセルの条件」にG1セルが無いように見えるのですが、 どうしてもG列で起動したいのであれば、以下の回答は無意味ですのでスルーなさってください。 さて、ご提示のコードから察するに 「Sheet2のF列またはH列の任意行のセルをダブルクリックしたらマクロを起動」と言うことですね。 だとすると、 With Target If .Column = 6 Then UserForm1.Show ElseIf .Column = 8 Then と書いてやります。 これで、ダブルクリックされたセルが6列目=F列だったら、と言う意味に使えます。 同様に、Target.Rowで行を取れますので、以降の処理にはコレを使います。 つまり、一部を抜粋して、 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim TRow As Long, TCol As Long Dim k As Long, myFlg As Boolean, myArray Cancel = True TRow = Target.Row: TCol = Target.column If TCol = 6 Then UserForm1.Show ElseIf TCol = 8 Then myArray = Array("種類1", "種類2", "種類3") myFlg = False For k = 0 To UBound(myArray) If Range("F" & TRow) = myArray(k) Then myFlg = True End If ~以下、処理続行 と言うくらいの感じでしょうか。 (Withは却って邪魔な気がしたので取っ払いました。) その他の部分にも応用します。 例えば、コンボ2のコードはこんな感じ。 Private Sub ComboBox1_Change() Worksheets("Sheet2").Range("H" & ActiveCell.Row) = UserForm2.ComboBox1.Text Unload Me End Sub ただし、 コンボ2の処理が動く前に「アクティブセルがダブルクリックしたセルから動かないように」 しておかないといけません。 おそらく、ご提示の処理であれば問題なかろうと思います。 とりあえず、参考までに。
お礼
> このコードをいじくってSheet2以降も同作業できるようにお願いします すみません Sheet2の2行目以降が正解です > Sheet2のG1をダブルクリックで すみません F1です 間違えがたくさんありますね。今後見直しを強化します 本題ですが、大変参考になりました 勉強しながら成功しました ありがとうございます