こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルのVBAについて教えてください。

以前に下記のような内容のプログラムを作成したいと投稿致しましたら

dim row as Integer
for row = 1 to 65535
if (selectSheet.Cells(1, row) = "") then
selectSheet.Cells(1, row) = "#####"
EndIf

をアレンジしたいのです。
上記のプログラムが構築されているコマンドボタンと同じuserformにオプションボタンを5個、コンボボックスを一つ作りました。
オプションボタン1を選択するとコンボボックスにはあ行が。
オプションボタン2を選択するとコンボボックスにはか行が。
オプションボタン3を選択するとコンボボックスにはさ行が。
オプションボタン4を選択するとコンボボックスにはた行が。
オプションボタン5を選択するとコンボボックスにはな行が。
選択できるようにしたいのです。
次に選んだオプションボタンと同名前のシートに上記の#####が入力されるようにしたいのですが、どのようにすればいいのですか?

このように教えて頂きました。

Public myop As Integer 'オプション選択保持用

Private Sub CommandButton1_Click()
Dim row As Integer
Dim mykey As String '比較キー
'選択したオプションボタンにより
'比較キーと選択保持用変数に各値を代入
Select Case True
Case OptionButton1: mykey = "[あ-お]*": myop = 1
Case OptionButton2: mykey = "[か-こ]*": myop = 2
Case OptionButton3: mykey = "[さ-そ]*": myop = 3
Case OptionButton4: mykey = "[た-と]*": myop = 4
Case OptionButton5: mykey = "[な-ほ]*": myop = 5
Case Else: myop = 0
End Select
If myop = 0 Then Exit Sub
For row = 1 To 65535
If ActiveSheet.Cells(1, row).Value Like mykey Then
ActiveSheet.Cells(1, row) = "#####"
End If
Next row
End Sub

これを流用して自分でいじりたいのですが、私が未熟ですので、コードの意味、役割がさっぱりわかりません。
わがままな質問ではございますが、どなたか上記のコードの意味を教えて頂けませんか?
よろしくお願い致します。

投稿日時 - 2010-01-29 22:47:06

QNo.5633759

すぐに回答ほしいです

質問者が選んだベストアンサー

これが2回目分です。
 
■次に、UserForm2~5それぞれに次のコードをコピペする

'----●UserForm2 ----------
Private Sub CommandButton1_Click()
  On Error Resume Next
  Unload UserForm2
  Unload UserForm3
  Unload UserForm4
  Unload UserForm5
End Sub

Private Sub CommandButton2_Click()
  UserForm2.Hide
  UserForm3.Show
End Sub

'----●UserForm3 --------
Private Sub CommandButton1_Click()
  UserForm3.Hide
  UserForm2.Show
End Sub

Private Sub CommandButton2_Click()
  UserForm3.Hide
  UserForm4.Show
End Sub

'----●UserForm4 --------
Private Sub CommandButton1_Click()
  UserForm4.Hide
  UserForm3.Show
End Sub

Private Sub CommandButton2_Click()
  UserForm4.Hide
  UserForm5.Show
End Sub

'----●UserForm5----------
Private Sub CommandButton1_Click()
  UserForm5.Hide
  UserForm4.Show
End Sub

Private Sub CommandButton2_Click()
  Dim Lastrow As Long
 
  With Sheets(KirokuSheetName)
    Lastrow = .Cells(Rows.Count, "A").End(xlUp).Row
    .Cells(Lastrow + 1, "A").Value = GetCaption(2)
    .Cells(Lastrow + 2, "A").Value = GetCaption(3)
    .Cells(Lastrow + 3, "A").Value = GetCaption(4)
    .Cells(Lastrow + 4, "A").Value = GetCaption(5)
  End With
  
  Unload UserForm2
  Unload UserForm3
  Unload UserForm4
  Unload UserForm5
End Sub

Private Function GetCaption(N) As String
  Dim i As Integer
  GetCaption = ""
  For i = 1 To 4
    If UserForms(N - 2).Controls("OptionButton" & i).Value Then
      GetCaption = UserForms(N - 2).Controls("OptionButton" & i).Caption
      Exit For
    End If
  Next i
End Function
'------------------------------

質問者が先にテストしたブックで動作を確認すること!
以上です。
 

投稿日時 - 2010-02-01 10:22:14

ANo.12

このQ&Aは役に立ちましたか?

6人が「このQ&Aが役に立った」と投票しています

回答(13)

ANo.13

おや、まあ、2回に分けたら投稿できた。
原因不明ですが、投稿できたので、よしとしませう。

これが最後の回答になるように、祈って。。。
以上です。

投稿日時 - 2010-02-01 10:31:18

補足

今帰宅しました。
昨晩はそのような障害があったんですか・・・。
何度も投稿を試みて頂いてありがとうございました。
頂いたサンプルコードですが、後日確認させて頂きます。
ありがとうございました。
また3回目の投稿にコメントさせて頂きます。

投稿日時 - 2010-02-01 22:40:00

ANo.11

myRangeです。
昨夜から何回も投稿を試みるが、アクセス集中、で拒否され、今朝も同様。
恐らく、OKWAVEのシステムがバグっているのだろうと推測。
OKWAVE,しっかりせんかぃっ! と叱咤激励したい気分。

と、ま、それは置いといて、今回の投稿もちょと長いので2回に分けてみる。

これは、1回目。
 
第一段階、上手くいって何よりです。
第二段階ですが、これは、Userform2~5のOptionのCaptionを
【第一】段階のUserForm1で選択したシートのA列に転記、ですね?

'-----------------------------------------
■先ずUserForm1の宣言セクションの変数KirokuSheetNameを削除して
標準モジュールの最初(宣言セクション)に

  Public KirokuSheetName As String

とグローバル変数として宣言する
'-----------------------------------------

■印刷シートへ次のコードを追加

Private Sub CommandButton2_Click()
  If KirokuSheetName = "" Then
    MsgBox "シート名が選択されてない"
  Else
    UserForm2.Show
  End If
End Sub
'-------------------------------------------

ここまでが1回目送信分。
 

投稿日時 - 2010-02-01 10:19:21

補足

コード試しました。
コマンドボタン2をクリックすると、シート名が洗濯されてない。
とメッセージがでてきます。
ちゃんと最初にコマンドボタン1で転記先シートを決めた上でやりましたが、どうしてなのでしょうか?

投稿日時 - 2010-02-02 22:30:11

ANo.10

暇なのでまたまた登場、myRangeです。

>言われた通りにやっているのですが・・・。
>9.印刷シートのコードを開いて、教えていただいたサンプルコードをコピペする

これを見て、おい、おい、ということで、前回の回答を見たところ、
あろうことか当方が、コードを印刷シートのモジュールへと言ってますね。
それは間違いで、
回答のコードをコピペする場所は、印刷シートではなくて、●UserForm1●です。

印刷シートには下記のようにUserForm1を表示させるコードのみを書いておく。

Private Sub CommandButton1_Click()
  UserForm1.Show
End Sub
 

これで上手くいくでしょう。
以上です。

投稿日時 - 2010-01-31 16:47:16

補足

できました!!!

あせっていた気持ちがすごく楽になりました。
今から自分のに試します!
未熟な私に丁寧に付き合ってくれてありがとうございます><。
自分ので試したらまた報告いたします!

投稿日時 - 2010-01-31 17:05:14

お礼

私のフォームでもうまくいきました。

次なんですが、印刷シートにコマンドボタン2があります。
それには以前説明したようなオプションボタンで選択していって記録するマクロがあるのですが、コマンドボタン1で選択した転記先シートと同じところに転記するのはどのようにするのでしょうか?

投稿日時 - 2010-01-31 19:02:30

ANo.9

>If ComboBox1.ListIndex = -1 Then
>で実行エラー424が発生します。

424の他に、エラーメッセージは表示されませんでしたか?
表示されてたらそれも提示しないと分かりません。

コントロールの種類、数、シート名など前回の回答の条件を満たしているんですよね。

ま、何れにしろ、アップしたコードは●テスト済み●なので
回答のとおりすればエラーは出ないはずです、というより、
エラーの出るような部分はありません。

で、試しに、新しいブックでシート名など回答の条件でアップしたコードを試してみてください。
UserForm1だけにすること。
 
その後、現在使用してエラーが出るというコードをアップしてください。
UserForm1のモジュールに書いてあるコードを全部アップすること。
文字制限(2000文字)をオーバーするようだったら、2回に分けて投稿のこと。

以上です。
 

投稿日時 - 2010-01-31 15:29:44

補足

言われた通りにやっているのですが・・・。

私がしていることを順を追っていいますね。
1.エクセル起動
2.シートを6個用意する
3.シート1を印刷 シート2をリスト シート3~6を記録1~4に名前を書き換える
4.印刷シートにコマンボボタン1を作成
5.VBA起動
6.userform1を作成
7.userform1にオプションボタンを4個 コンボボックスを1個 テキストボックスを5個 コマンボボタンを1個作成
8.オプションボタン1のCaptionを記録1 オプションボタン2のCaptionに記録2とその後3,4を同様にする
9.印刷シートのコードを開いて、教えていただいたサンプルコードをコピペする
10.リストのA2からA9まで適当な文字を入力 B列C列D列も同様に適当に打ち込む
11.印刷シートにあるコマンドボタンをクリックし、マクロを起動させる
12.すると実行時エラー424 オブジェクトが必要です となりコードにいき、先ほどの場所が黄色で囲まれている

このようになってしまいます・・・。
試験の動作確認でこうなるので、自分のものではまだためしていません。

投稿日時 - 2010-01-31 15:59:15

ANo.8

myRange、連続投稿。サンプルコードです。

以下のコードを 印刷シートモジュールにセットして実行する。
先に示したシート名などの条件は必ず遵守すること。
 

'-------------------------------------------------
 Dim ListAdrs
 Dim KirokuSheetName As String

Private Sub UserForm_Initialize()
  OptionButton1.Caption = "記録1"
  OptionButton2.Caption = "記録2"
  OptionButton3.Caption = "記録3"
  OptionButton4.Caption = "記録4"
  
  ListAdrs = Split("A2:A9,B2:B9,C2:C9,D2:D9", ",")
End Sub
'---------------------------------------------

Private Sub ComboBox1_Enter()
  Dim i As Integer
  
  KirokuSheetName = ""
  
  For i = 1 To 4
    If Controls("OptionButton" & i).Value Then
      ComboBox1.List = Sheets("リスト").Range(ListAdrs(i - 1)).Value
      KirokuSheetName = Sheets(Controls("OptionButton" & i).Caption).Name
      Exit For
    End If
  Next i
  
  If KirokuSheetName = "" Then
    MsgBox "OptionButtonにチェックが入ってない!"
  End If
End Sub
'-----------------------------------------------

Private Sub CommandButton1_Click()
  Dim i As Integer
  Dim Lastrow As Long
  
  If ComboBox1.ListIndex = -1 Then
    MsgBox "ComboBoxが選択されてない"
    Exit Sub
  End If
  
  With Sheets("印刷")
    .Range("A1").Value = ComboBox1.Value
    .Range("A4").Value = TextBox1.Value
    .Range("A5").Value = TextBox2.Value
    .Range("B3").Value = TextBox3.Value
    .Range("D3").Value = TextBox4.Value
    .Range("D4").Value = TextBox5.Value
  End With
  
  With Sheets(KirokuSheetName)
    Lastrow = .Cells(Rows.Count, "A").End(xlUp).Row
    .Cells(Lastrow + 1, "A").Value = ComboBox1.Value
    .Cells(Lastrow + 1, "B").Value = TextBox1.Value
    .Cells(Lastrow + 1, "C").Value = TextBox2.Value
    .Cells(Lastrow + 1, "D").Value = TextBox3.Value
    .Cells(Lastrow + 1, "E").Value = TextBox4.Value
    .Cells(Lastrow + 1, "F").Value = TextBox5.Value
  End With
  
  Unload UserForm1
End Sub
'----------------------------------------------------

以上です。

投稿日時 - 2010-01-31 13:33:10

補足

サンプルコードありがとうございました。
また、補足説明に不備があり、申し訳ありませんでした。
ご説明頂いたとおりしましたが、

Private Sub CommandButton1_Click()
  Dim i As Integer
  Dim Lastrow As Long
  
  If ComboBox1.ListIndex = -1 Then
    MsgBox "ComboBoxが選択されてない"
    Exit Sub
  End If

のIf ComboBox1.ListIndex = -1 Then
で実行エラー424が発生します。
どうすればいいのでしょうか?

投稿日時 - 2010-01-31 13:55:43

ANo.7

補足要求の重要事項が補足されてません。
なぜ無視するでしょうか?
質問者のための補足要求ですよ!

なかなか意思の疎通が図れないようなので
手始めに、UserForm1の分だけのコードをアップしてみましょう。
よって、新しい補足は不要です。

●シートの名前は必ず次のようにすること
  印刷用シート、、、印刷
  リストシート、、、リスト
  記録用シート、、、記録1~記録4(数字は全角)

●記録シート名の取得
  UserFom1のOptionButtonのCaptionと同じとする
  (Captionが、記録1とか記録4とかになってるということ)

●リストシートの一覧は次のようになってること
  OptionButton1用: A2~A9
  OptionButton2用: B2~B9
  OptionButton3用: C2~C9
  OptionButton4用: D2~D9


上記のような条件で、サンプルコードは続けて投稿します。
 
 

投稿日時 - 2010-01-31 13:30:04

ANo.6

またまたまた登場、myRangeです。

>=====
印刷シートに別のコマンドボタンをもうひとつ用意しています。
そのマクロとは、userformにオプションボタンを4個程度配置しています。
そのオプションボタンを選択形式でまた次の同じようなオプションボタンが4個あるようなuserformへと進んでいきます。
userformはhideで一旦隠して、最後のuserformで今まで隠していて、選択されているオプションボタンのcaptionを転記していくといった内容になっています。テキストボックスもいくつかありますが。。。
参考までに全部ではありませんがコードをのせておきます。

If UserForm1.OptionButton1 = True Then
.Range("a" & m_row).Value = UserForm1.OptionButton1.Caption
ElseIf UserForm1.OptionButton2 = True Then
.Range("a" & m_row).Value = UserForm1.OptionButton2.Caption
<=====


●更に補足が必要です。
●簡単のために、UserFormが1~3の3つあり、
 UserForm1がメイン、2~3がサブと仮定して、、
(以下、UserFormは、Formと書く)
---------------------------------------------------
Form1のボタンでForm1の内容を転記したあと
このForm1は、Unloadするのか、Hideするのか?
--------------------------------------------------
印刷シートのボタン2で、Form2を表示するのは分かったが
そこから次のForm3を表示するタイミングが不明。
例えば、Form2にもボタンがありそれでForm3を表示するとか。。
----------------------------------------------------
提示のコードでは、Form1のOptionしか書いてないが
実際は、Form1~3全てのチェックされたOptionのCaptionを転記したいということか
また、提示のコードでは、記録シートの【A列】転記するようになってるが
前回の補足には

○リストから選択したものが印刷用シートA列1行と記録用シートのA列の空白セルに転送。

このように、記録用シートのA列には、Form1のComboで選択した項目を転記とあるが、
そこら辺りをもっと詳しく補足のこと。
-----------------------------------------------------

■■■注意点■
するしないは別にして、実際の流れを実際に即して提示しないと
(要するに今までのように小出しにしないということ)
コードをアップする前に何回も遣り取りをしないといけなくなるので
そこら辺りを十分に考慮して質問補足すること


尚、コード自体は簡単なものですので(但し、慣れた人にとっては)、
あとは質問者がやりたいことをちゃんと説明できるかどうかです。
以上です。

投稿日時 - 2010-01-31 09:48:00

補足

おはようございます。

私の説明不足で混乱させてしまっていますね・・・。
申し訳ありません。
印刷用シートの最初に補足しましたコマンドボタンを1とします。
今回のもうひとつのコマンドボタンを2とします。
コマンドボタン1と2の関連性は、コマンドボタン1で決定した「どのシートに転記するか」だけです。
前回の補足でコードを表示しましたが、userform1とか書いてあるからややこしかったのですね・・・。
コマンドボタン2のみの機能を説明致します。
コマンドボタン2はuserformが4個で成り立っております。
仮に各々のuseroformをA~Dとします。
formA~Dは同じような構成です。

オプションボタンG    オプションボタンH
オプションボタンI     オプションボタンJ
コマンドボタンL        コマンドボタンY
↑前のformに戻る       ↑次のformへ進む機能を
機能を持たせている      持たせている

このようになっております。
ただし、formAのコマンボドタンLはformAをunload。
formDのコマンドボタンYはformA~Dまでのオプションボタンの内容を転記するきっかけとします。
formAでオプションボタンンを選び、コマンドボタンLを選択して一旦formし、formBへ。formBでも同様にオプションボタンを選び、コマンドボタンでhideにしてformCへと続いていくようにしています。
で最後にformDで一斉に転記としています。

投稿日時 - 2010-01-31 10:04:50

ANo.5

またまた登場、myRangeです。

初めからそのように書けば分かりやすかったですね。
それにしても最初とは随分と違う質問になりましたねぇ。。(^^;;;

ただ、も少し補足が必要です。


>4個のオプションボタンがあり
>オプションボタン毎にコンボボックスのリストが変化する。


コンボボックスにリストを設定するタイミングは?
オプションボタンをクリックした瞬間にセットする?


>5個テキストボックスの内容を印刷用シートのあるセルと
>記録用シートの、先ほどと同じ行に転送。

記録シートは転記するたびに行方向に増えていくが
印刷用シートは転記するたびに増えていかないで、
常に決まったセルに転記するのか?
また、印刷用シートの【ある】セル、とはどのセル?


それから、転記が終了した後の処理の流れはどうなっているか?
例えば、1件転記したあと、次はどんな処理をするのかということです。
 

上記が補足されたらサンプルコードをアップします。
以上です。

投稿日時 - 2010-01-30 22:52:24

補足

返答ありがとうございます。
ネット上のマクロ講座で勉強はしたのですが、求めているものを簡潔に考えようとしても難しいです・・・。
未熟な私の手助けをしていただいて本当にありがとうございます。

コンボボックスにリストを設定するタイミングは?
オプションボタンをクリックした瞬間にセットする?

そうです。オプションボタン4個のすぐ↓にコンボボックスを設けているので、オプションボタンを選択後、コンボボックスでリスト内から選択といった形をとりたいです。
自分でも色々調べたのですが、オプションボタンを色々変更してクリックするとリストがおかしくなっちゃったりするのですよね・・・?


記録シートは転記するたびに行方向に増えていくが
印刷用シートは転記するたびに増えていかないで、
常に決まったセルに転記するのか?

おっしゃるとおりです。
印刷用はフォーマットを作っているので決まった箇所に転記されたいのです。
記録用は、今後データを行ごとに蓄積し、管理したいので、最初のコンボボックスの選択したリスト内容を転記した同じ行にしたいのです。ご理解はいただいていると思いますが、データは蓄積したいのでリスト転記は空白セルを検索し、転記させたいのです。



また、印刷用シートの【ある】セル、とはどのセル?

テキストボックス1はA4
テキストボックス2はA5
テキストボックス3はB3
テキストボックス4はD3
テキストボックス5はD4
です。

一件転記した後ですが、
印刷シートに別のコマンドボタンをもうひとつ用意しています。
そのマクロとは、userformにオプションボタンを4個程度配置しています。
そのオプションボタンを選択形式でまた次の同じようなオプションボタンが4個あるようなuserformへと進んでいきます。
userformはhideで一旦隠して、最後のuserformで今まで隠していて、選択されているオプションボタンのcaptionを転記していくといった内容になっています。テキストボックスもいくつかありますが。。。
参考までに全部ではありませんがコードをのせておきます。

If UserForm1.OptionButton1 = True Then
.Range("a" & m_row).Value = UserForm1.OptionButton1.Caption
ElseIf UserForm1.OptionButton2 = True Then
.Range("a" & m_row).Value = UserForm1.OptionButton2.Caption
ElseIf UserForm1.OptionButton3 = True Then
.Range("a" & m_row).Value = UserForm1.OptionButton3.Caption
ElseIf UserForm1.OptionButton4 = True Then
.Range("a" & m_row).Value = UserForm1.OptionButton4.Caption
End If

これらの作業が一通りとして、また同じ作業をすると違う行にデータが蓄積されていくようにしたいのです。


説明に不足な点だらけとは思いますがよろしくお願い致します。

投稿日時 - 2010-01-30 23:26:54

ANo.4

#2です

| With Worksheets("sheet2")を
| Worksheets("OptionButton1.Caption")
| みたいになるわけですか?

""はいりません
""で囲むとただの文字列と扱われます
Worksheets(OptionButton1.Caption)

※変数と聞いてワカラナイのであれば、
 まずはVBAでの基本を抑えないと、
 この先もっとワカラナイと思いますよ 笑

投稿日時 - 2010-01-30 20:04:44

ANo.3

期限が迫っていて焦ってらしいのは分かりますが、
最初の質問と、回答1の補足はほとんど別物になってますし
何をどうしたいのかが明確には読み取れません。
回答1の補足の質問者のたコードも説明とは全然異なっていますし。

特に、以下は意味不明です。

>また、userform1で決めた、記録先シート(オプションボタン1~5のいずれを選択したか)に他のuserfromでの内容を記録していきたいのです。
>他のuserfromtとは下記のようになります。
>オプションボタンを選択してuserformを進んでいき、最後のuserformにコマンドボタンがあり、オプションボタンに名前を記録していくマクロです。

UserForm1以外のUserFormがいくつあるのか書いてない、
また、UserFormを進んできき、とはどういうことか
さらに、最後のUserformとは?
そしてまた、Userform1ではtextBoxの内容を記録するとあるが
他のUserFormではオプションボタンに名前を記録する、になってる
名前を記録するとは?
ここでいうオプションボタンはどのUserFormにあるのか
などなど疑問点を挙げれば限がありませんね。。(^^;;;

UserFormの数、それぞれのコントロール、それらの役目、転記するセル。。。など
やりたいことを実際に即して詳細に再度補足した方がいいでしょう。
 

投稿日時 - 2010-01-30 16:19:26

補足

説明が下手で申し訳ありません。

順を追って説明したいのですが・・・。
どんなVBAが完成してほしいか書き出したほうがよろしいでしょうか?

書き出してみます。
シートは全部で6シート。
うち4シートは記録用です。
もう1シートはコンボボックスのリストデータ用です。
残り1シートは印刷用です。
印刷用シートにコマンドボタンが3個あります。
印刷用シートのコマンボボタン1をクリックすると、userform1が呼び出される。

userform1に持たせたい機能
1. 4個のオプションボタンがあり、オプションボタン毎にコンボボックスのリストが変化する。
2. テキストボックスが5個ある。
3. コマンドボタンがあり、そのコマンドボタンをクリックすると以下の用に動いてほしい。
○ リストから選択したものが印刷用シートA列1行と記録用シートのA列の空白セルに転送。
○ オプションボタン1を選択した場合は記録用のシート1に、オプションボタン2はシート2、オプションボタン3はシート3、オプションボタン4はシート4としたいです。
○ 5個テキストボックスの内容を印刷用シートのあるセルと、記録用シートの、先ほどと同じ行に転送。
この場合テキストボックス1をB列、テキストボックス2をC列・・・・。

このようにしたいです。
わかります・・・か?
説明が下手で申し訳ありません。

投稿日時 - 2010-01-30 20:35:19

ANo.2

| 今はWith Worksheets("sheet2")となっていますが、これをuserform1で決定した記録先シートにしたいのです。

とりあえずここだけ。
WorksheetsというのはWorksheet(ワークシート)の集合体です。
Worksheets("sheets2")
と指定することで一つのワークシートを取得できているのです。
つまりシート名"sheets2"が変数であれば、
userform1で指定した文字列を指定できることになります。

userform1のtextbox1に指定するものとすると、
このようになります。

Worksheets(textbox1.Text)

どうでしょうか?

投稿日時 - 2010-01-30 11:37:29

補足

なるほど。
では、userform1の選択を保持するではないということですね。
では、私の場合はオプションボタン1~5で選んだものをワークシートにするということですね。
理屈はなんとなくわかりましたが、私にはここからが難しいのです。
まず、何か変数といいますか、前おきのコードですか?
そういった類のものがわかりません。

With Worksheets("sheet2")を
Worksheets("OptionButton1.Caption")
みたいになるわけですか?

投稿日時 - 2010-01-30 12:02:58

ANo.1

さんこうなるかわからないのですが、

このての処理は、エクセルよりもアクセスをつかった方が簡単にできるように
おもえてしまいました。
参考までに。

せつめいしたいのですが、ここにかくだけのスペースがないので
聞きたいことをまとめてからにしていただけますか?

詳細を聞きたければ、またここにきてください。

投稿日時 - 2010-01-30 04:17:11

補足

返答ありがとうございます。
お言葉に甘えさせて頂き、私が作成したいマクロを書かせて頂きます

利用するシートは全部で5個です。
このシートの利用方法は記録先といった類のものです。
マクロですが、userform1にオプションボタンが5個とコンボボックスが一つあります。
オプションボタンを利用したい理由ですが、先に述べた記録先のシートをこのオプションボタンで指定したいのと、コンボボックスをオプションボタン毎に連動させたいのです。
なので記録先シート5個に対してオプションボタンも5個です。
また同userform上にテキストボックスが6個あり、オプションボタンで決定したシートのA行の空白セルを検索したのち、テキストボックス6個の内容を空白セルと同じ行に記録されていきたいのです。
データを蓄積していきたいのです。
最後に同userformにコマンドボタンがあり、そのコマンドボタンをクリックするとテキストボックスの内容が記録されるようにしたいのです。

また、userform1で決めた、記録先シート(オプションボタン1~5のいずれを選択したか)に他のuserfromでの内容を記録していきたいのです。
他のuserfromtとは下記のようになります。
オプションボタンを選択してuserformを進んでいき、最後のuserformにコマンドボタンがあり、オプションボタンに名前を記録していくマクロです。

With Worksheets("sheet2")

m_row = .Range("a" & Rows.Count).End(xlUp).Row + 1

If UserForm10.OptionButton1 = True Then
.Range("a" & m_row).Value = UserForm1.OptionButton1.Caption
ElseIf UserForm10.OptionButton2 = True Then
.Range("a" & m_row).Value = UserForm1.OptionButton2.Caption
End If
If UserForm1.OptionButton11 = True Then
.Range("b" & m_row).Value = UserForm1.OptionButton1.Caption
ElseIf UserForm11.OptionButton2 = True Then
.Range("b" & m_row).Value = UserForm1.OptionButton2.Caption
End If

中略
.Range("c" & m_row).Value = UserForm2.TextBox1.Value

End With

今はWith Worksheets("sheet2")となっていますが、これをuserform1で決定した記録先シートにしたいのです。
VBAの知識がないものですから、論点を得ていないであろう説明で申し訳ありませんが、期限も迫っており、大変焦っております。
なにとぞご協力を賜りますよう、よろしくお願い致します。
不明な点については、お答えしていきたいので、こまめにチェック致します。何なりとお聞きください。

投稿日時 - 2010-01-30 08:21:20

あなたにオススメの質問