• ベストアンサー

エクセルマクロ_テキストボックスをシートに反映(その2)

エクセルマクロ初心者です。(2003使用_ユーザーフォーム) 先ほどは大変お世話になりました。 複数行に応用させようとしたのですが、管理番号が余計に記載(テキストボックス(出荷日など)が空欄であっても、管理番号だけはとられてしまいます)されてしまいます。すみませんが、ご教授よろしくお願いいたします。 リストボックス1のデータは、Sheet1を表示しています。→管理番号はSheet2のA最終行に記載されます。 テキストボックス1(回答日)は、上記の管理番号記載のとなりに、 テキストボックス2(出荷日)は、テキストボックス1記載のとなりに、 ・・・とテキストボックス4(コメント)(これはK列)に1行で記載されます。 ↑ここまでは、教えていただいたので、完璧なのですが、 テキストボックス2~4までの内容を、あと複数行(4件)追加できるように試してみたのですが、空欄であっても管理番号だけは常に記載されてしまいます。 テキストボックス2と5に記載されている場合は、Sheet2に値を反映させるが、空欄の場合は、値を反映させないようにしたいのです。 (Sheet1=データベース) C5   D5 管理番号 品名 アカ12 りんご アオ56 みかん クロ34 なし クロ89 すいか アオ12 もも (Sheet2=入力シート) A(管理番号)    B(回答日)    C(出荷日)   D(数量)     K(コメント) アオ56        8月9日        8月10日      75     送り先の確認 アオ56                    8月11日      80 クロ34        9月4日        9月5日      80 (今回は、2行で作成した場合のマクロを記載しました) Private Sub UserForm_Initialize() With ListBox1 .ColumnWidths = "0;0;50;50" .ColumnCount = 4 .RowSource = "Sheet1!A5:D" & Worksheets("Sheet1").Range("C" & Rows.Count).End(xlUp).Row End With End Sub Private Sub CommandButton1_Click() If TextBox2.Value Then Dim lRow As Long With Worksheets("Sheet2") lRow = .Range("A" & Rows.Count).End(xlUp).Row .Range("A" & lRow + 1).Value = ListBox1.List(ListBox1.ListIndex, 2) If IsDate(TextBox1.Value) Then .Range("B" & lRow + 1).Value = TextBox1.Value End If If IsDate(TextBox2.Value) Then .Range("C" & lRow + 1).Value = TextBox2.Value End If If IsNumeric(TextBox3.Value) Then .Range("D" & lRow + 1).Value = TextBox3.Value End If .Range("K" & lRow + 1).Value = TextBox4.Value End With End If If TextBox5.Value Then Dim llRow As Long With Worksheets("Sheet2") llRow = .Range("A" & Rows.Count).End(xlUp).Row .Range("A" & llRow + 1).Value = ListBox1.List(ListBox1.ListIndex, 2) If IsDate(TextBox5.Value) Then .Range("C" & llRow + 1).Value = TextBox5.Value End If If IsNumeric(TextBox6.Value) Then .Range("D" & llRow + 1).Value = TextBox6.Value End If .Range("K" & llRow + 1).Value = TextBox7.Value End With End If Dim myCtrl As Control For Each myCtrl In Controls If TypeName(myCtrl) = "TextBox" Then myCtrl.Value = vbNullString End If Next End Sub (ユーザーフォーム) リストボックス1=Sheet1のデータを反映 テキストボックス1(回答日) テキストボックス2(出荷日),テキストボックス3(数量),テキストボックス4(コメント)←1件目 テキストボックス5(出荷日),テキストボックス6(数量),テキストボックス7(コメント)←2件目 ↑1件目のみでコマンドボタンを押した場合は、1件目のみの管理番号取得をしたいのです。が今は、2件目が空欄でも管理番号はとられてしまいます。 長くなってしまいすみません。 どなたかご回答いただければ幸いです。よろしくお願いいたします。

  • kkk-z
  • お礼率50% (17/34)

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

  • ベストアンサー
noname#144013
noname#144013
回答No.3

こんにちは。#2です。 すみません。#2のサンプルマクロで一部訂正があります。     ◎訂正前       '基準のセル位置(行位置)を設定       '※データ最終行の1行下の行位置を取得       lRow = .Range(Cells(Rows.Count, lCol), _             Cells(Rows.Count, lCol)).End(xlUp).Row + 1     ◎訂正後       '基準のセル位置(行位置)を設定       '※データ最終行の1行下の行位置を取得       lRow = .Range(.Cells(Rows.Count, lCol), _             .Cells(Rows.Count, lCol)).End(xlUp).Row + 1       ※"Cells"(2箇所)の前にピリオド '.' を追加して下さい。 どうも、すみませんでした。

kkk-z
質問者

お礼

ご丁寧に本当にありがとうございました。 今一度コードを勉強させていただきます。助かりました。

その他の回答 (2)

noname#144013
noname#144013
回答No.2

こんにちは。 Excelのバージョンまたは、プロパティの設定等により違ってくるのかもしれ ませんが、#1さんが回答されているとおり、ユーザーフォームのイベント関数 CommandButton1_Click() 内の以下のIf文が原因かと思われます。   If TextBox2.Value Then     :     :   End If   If TextBox5.Value Then     :     :   EndIf この条件式の場合、テキストボックス2及び5が空欄(=空き文字列)の場合は、 偽(False、0)ではなく、真(True、0以外)と判定されてしまうため、Then ブロック内の処理が実行され、管理番号などがシートに反映されてしまって いるのだと思われます。 ※ちなみに当方の環境(Excel2000ですが。)で試してみたところ、上記のIf文で、    「実行時エラー '5'     プロシージャの呼び出し、または引数が不正です。」  というエラーが発生しました。 これを修正するとしたら、#1さんの示された記述か、または、   If IsDate(TextBox2.Value) Then     :     :   End If   If IsDate(TextBox5.Value) Then     :     :   End If のような判定式にする必要があると思います。 これで、テキストボックス2及び5が空欄の場合は、IsDate() で偽(False)が返され るため、Thenブロック内の処理は実行されないと思います。 参考までに、当方で試してみた時のマクロコード(サンプル)を下記に記載し てみました。(ユーザーフォームのイベントプロシージャの部分です。) ※下記サンプルは、あくまで一例です。 ■サンプルマクロ 注)インデントのため全角スペースを入れています。   Excelモジュールに貼り付ける際は半角スペースorタブに置換して下さい。 //////////↓ここから////////// '==フォームのイニシャル処理== Private Sub UserForm_Initialize()   'リストボックスの初期化   '※ワークシート"Sheet1"上のデータベースをリストに登録   With ListBox1     .ColumnWidths = "0;0;50;50"     .ColumnCount = 4     .RowSource = "Sheet1!A5:D" & Worksheets("Sheet1").Range("C" & Rows.Count).End(xlUp).Row     .Selected(0) = True '←※初期状態で1行目を選択状態にしておく。   End With          ' これをやらずに未選択状態のまま .ListIndex を参照すると                  ' -1 になっているので、.List() でエラーになってしまう。 End Sub ' '==フォームのボタン(データ登録?)クリック時の処理== Private Sub CommandButton1_Click()   Dim nKmx As Integer '件数   Dim nKct As Integer '件カウンタ   Dim nDmx As Integer '1件分の入力データ数([管理番号],[回答日]は除く)   Dim nTb1 As Integer 'テキストボックス番号1([回答日]用)   Dim nTb2 As Integer 'テキストボックス番号2(件毎に可変)   Dim lCol As Long  '基準のセル位置(カラム位置)   Dim lRow As Long  '基準のセル位置(行位置)   'ワークシート"Sheet2"を編集対象とする   With Worksheets("Sheet2")     '== 仕様変更に対応する各種設定値の設定 ==     '※件数などを拡張した場合にこの設定値の変更で対応可とする     nKmx = 2  '件数を設定     nDmx = 3  '1件分の入力データ数を設定([管理番号],[回答日]は除く)     nTb1 = 1  '[回答日]のテキストボックス番号を設定     lCol = 1  '基準のセル位置(カラム位置)を設定     '件数分ループ     For nKct = 1 To nKmx       '基準のセル位置(行位置)を設定       '※データ最終行の1行下の行位置を取得       lRow = .Range(Cells(Rows.Count, lCol), _             Cells(Rows.Count, lCol)).End(xlUp).Row + 1       '基準のテキストボックス番号を設定       nTb2 = nTb1 + (nKct - 1) * nDmx + 1       'n件目のテキストボックスの入力値をシートに反映させる       '※テキストボックス(出荷日)に日付が入力されている場合のみ       If IsDate(Controls("TextBox" & nTb2).Value) Then         '[管理番号]をセット(リストボックスの選択項目を参照)         .Cells(lRow, lCol).Value = ListBox1.List(ListBox1.ListIndex, 2)         '[回答日]をセット(テキストボックス: nTb1で参照)         If IsDate(Controls("TextBox" & nTb1).Value) Then           .Cells(lRow, lCol + 1).Value = Controls("TextBox" & nTb1).Value         End If         '[出荷日]をセット(テキストボックス: nTb2で参照)         .Cells(lRow, lCol + 2).Value = Controls("TextBox" & nTb2).Value         '[数量]をセット(テキストボックス: nTb2+1で参照)         If IsNumeric(Controls("TextBox" & nTb2 + 1).Value) Then           .Cells(lRow, lCol + 3).Value = Controls("TextBox" & nTb2 + 1).Value         End If         '[コメント]をセット(テキストボックス: nTb2+2で参照)         If Controls("TextBox" & nTb2 + 2).Value <> "" Then           .Cells(lRow, lCol + 10).Value = Controls("TextBox" & nTb2 + 2).Value         End If       End If     Next nKct   End With   '全テキストボックスの入力値をクリア   Dim myCtrl As Control   For Each myCtrl In Controls     If TypeName(myCtrl) = "TextBox" Then       myCtrl.Value = vbNullString     End If   Next End Sub //////////↑ここまで////////// ■サンプルマクロについて 1)上記のサンプルマクロは、ユーザーフォーム上の入力データ件数などを   追加・変更した際に、できるだけコード修正部分が少なく済むように作成   してあります。   ※テキストボックスからシート上のセルへのデータ転送部分を共通化して、    データ件数分のループで処理できるようにしてあります。   ただし、条件としてテキストボックスの名前(オブジェクト名)は、     "TextBox" + 番号   の形式で、番号は順番に振られている必要があります。 2)ユーザーフォーム上の入力データ件数を増やした場合は、上記コードの   下記部分の’件数’の値を変更すれば対応可能かと思います。   ◎データ件数増加時に変更する部分(CommandButton1_Click()内)     '=================================================     '== 仕様変更に対応する各種設定値の設定 ==     '※件数などを拡張した場合にこの設定値の変更で対応可とする     nKmx = 2  '件数を設定     nDmx = 3  '1件分の入力データ数を設定([管理番号],[回答日]は除く)     nTb1 = 1  '[回答日]のテキストボックス番号を設定     lCol = 1  '基準のセル位置(カラム位置)を設定     '================================================= 3)また、1件分の入力データ項目を追加した場合は、上記2)の変更に加え、   下記部分のような入力項目に応じたシート上へのデータ転送処理を追加   する必要があります。   ◎入力項目追加時に追加する部分(CommandButton1_Click()内)     '=================================================     '[追加データ項目]をセット(テキストボックス: nTb2+nで参照)     If IsNumeric(Controls("TextBox" & nTb2 + 1).Value) Then         ↑(*1)                  ↑(*2)       .Cells(lRow, lCol + 3).Value = Controls("TextBox" & nTb2 + 1).Value                  ↑(*3)                     ↑(*2)     End If     '=================================================     (*1)対応するデータタイプチェック関数などを使用     (*2)対応するテキストボックスにアクセスするように増分値を調整     (*3)対応するシート上のセルにアクセスするように増分値を調整 4)参考までに上記マクロを使用したExcelブックの実行画面を添付しました。   ※見辛かったらすみません。 以上です。参考になれば幸いです。

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.1

>If TextBox5.Value Then if textbox5.value<>"" then に変更すれば終わり

kkk-z
質問者

お礼

ありがとうございました。 無事できました。

関連するQ&A

  • エクセルマクロ_テキストボックスをシートに反映

    エクセルマクロ初心者です。(2003使用_ユーザーフォーム) ユーザーフォームにリストボックスとテキストボックスを配置しています。リストボックス(Sheet1データを反映)の管理番号データを取得し、Sheet2のA1最終行に記載するところまではできました。 その後、もしテキストボックス1に日付型データ(回答日)があれば、先ほどの管理番号取得行の列のとなり(B列)に記載、空白であれば記載しない。 もしテキストボックス2に日付型データ(出荷予定日)があれば、先ほどの管理番号取得行の列のとなり(C列)に記載、空白であれば記載しない。 もしテキストボックス3にデータ(数量)があれば、先ほどの管理番号取得行の列のとなり(C列)に記載、空白であれば記載しない。 としたいのですが、offsetを使おうとしたのですが、うまくできませんでした。 すみませんが、どなたかご親切な方ご教授よろしくお願いいたします。 (エクセルSheet1=データベース) C5  D5 管理番号   品名       アカ12    りんご       アオ56    みかん       クロ34    なし       クロ89    すいか       アオ12    もも (エクセルSheet2=記入シート) 管理番号 回答日      出荷予定日 数量 アカ12 9月20日       9月23日 100 アオ56            9月21日 800 ↑回答日の記載はない場合もあります。 リストボックス1で選んだ管理番号取得行に一行に内容を表示させたいと思っています。 Private Sub UserForm_Initialize() With ListBox1 .ColumnWidths = "0;0;50;50" .ColumnCount = 4 .RowSource = "Sheet1!A5:D" & Worksheets("Sheet1").Range("C" & Rows.Count).End(xlUp).Row End With End Sub Private Sub CommandButton1_Click() Dim lRow As Long With Worksheets("Sheet2") lRow = .Range("A" & Rows.Count).End(xlUp).Row .Range("A" & lRow + 1).Value = ListBox1.List(ListBox1.ListIndex, 2) End With (ユーザーフォーム配置)   リストボックス1   テキストボックス1(回答日=9/20)   テキストボックス2(出荷予定日=9/21) テキストボックス3(数量=900)  テキストボックス4(コメント=送り先一部変更あり) すみませんが、どなたかご親切な方ご教授よろしくお願いいたします。

  • エクセルマクロ_上書き(リストボックスでデータを抽出し、その行へ上書き)

    エクセルマクロ初心者です。(2003使用_ユーザーフォーム,リストボックス,テキストボックス,チャックボックス) Sheet1のデータをユーザーフォームへ反映させ、修正したものをその行へ上書きするマクロを作成したいと思っていますが、うまくいかないのでどなたかお教え願います。 (Sheet1―A8より表がはじまります) 管理番号 品名 数量 希望納期 変更数量 完納 コメント アカ12 みかん     40   8月3日 アオ35 りんご     30   8月5日 クロ54 なし     50   7月7日 アカ98 もも     20   9月1日 アオ43 すいか     35   8月3日 ●完納の行がチャックボックスで、チェックがついたら、”完納”と記載、チェックがついていなかったら空欄のまま。もし表に”完納”と記載されていたら、コマンドボタン1でデータを抽出した時に、チェックがつくようにしたいのです。が、まったくうまくいかないのです。 ●また、コマンド1での抽出データに値を入力したものを上書きすることは一部できるのですが、空欄にしたときに、空欄の状態(無記入)に上書きすることができません。 Private Sub UserForm_Initialize() Dim r As Range Set r = Sheets("Sheet1").Range("A8").CurrentRegion.Offset(1) Set r = r.Resize(r.Rows.Count - 1) With ListBox1 .ColumnWidths = "50;50;0;0;0;0;0" .ColumnCount = 7 .RowSource = r.Address(A8, G) End With End Sub Private Sub CommandButton1_Click() If ListBox1.ListIndex <> -1 Then TextBox1.Value = ListBox1.List(ListBox1.ListIndex, 0) TextBox2.Value = ListBox1.List(ListBox1.ListIndex, 1) TextBox3.Value = ListBox1.List(ListBox1.ListIndex, 2) TextBox5.Value = ListBox1.List(ListBox1.ListIndex, 4) TextBox6.Value = ListBox1.List(ListBox1.ListIndex, 6) End If If Not IsEmpty(ListBox1.List(ListBox1.ListIndex, 3)) Then TextBox4.Value = Format(CDate(ListBox1.List(ListBox1.ListIndex, 3)), "m/d") Else TextBox4.Value = "" End If End Sub Private Sub CommandButton2_Click() If ListBox1.ListIndex <> -1 Then Dim r As Range ' 元データの範囲を取得 Set r = Sheets("Sheet1").Range("A8").CurrentRegion.Offset(1) Set r = r.Resize(r.Rows.Count - 1) ' 日付型かどうかをチェック If IsDate(TextBox4.Value) Then ' 選択されたセルの更新 r(ListBox1.ListIndex + 1, 4) = TextBox4.Value End If r(ListBox1.ListIndex + 1, 7) = TextBox6.Value End If End Sub Private Sub CheckBox1_Click() If ListBox1.ListIndex <> -1 Then Dim l As Range Set l = Sheets("Sheet1").Range("A8").CurrentRegion.Offset(1) Set l = l.Resize(l.Rows.Count - 1) If CheckBox1.Value = True Then l(ListBox1.ListIndex + 1, 5).Value = "完納" If CheckBox1.Value = False Then l(ListBox1.ListIndex + 1, 5).Value = "<>" End If End If End If End Sub すみませんが、ご親切に教えていただけましたら幸いです。 よろしくお願いいたします。

  • EXCEL2003 VBA リストボックス

    お世話になります。 質問の内容についてですが、 現在VBAの勉強をしながらデータベースを組んでいます。 そこで、次のようなものを作っています。 Sheet1に於いて、     A    B     C 1  追番  名称   個数 2   1   りんご   1個 3   2   みかん  2個 4   3   なし    3個 5   4   なす    5個 というような表があるとします。 そして、VBAでフォームをつくり、TextBox1(名称入力用)、TextBox2(個数入力用)、ListBox1(すでに入力されているもの及び追加分のリスト用)、CommandButton1(入力された「名称」と「個数」をSheet1の表の一番下に追加)、CommandButton2(フォームを閉じる)という構成にしています。 また、Sheet1上にコマンドボタンを作っており、そのボタンを押すとフォームを呼出すようにしています。 流れとしては、既存の表に追加する場合、コマンドボタンを押してフォームを呼出し、テキストボックスに入力した内容をSheet1の一番下に追加する。また、フォーム上のリストボックスでも現在の表の内容を見る事ができる、というものです。 フォームでのコードは以下のようにしています。 Private Sub CommandButton1_Click() If TextBox1.Value = "" Then MsgBox "「名称」は必須項目です。" End If If TextBox2.Value = "" Then MsgBox "「個数」は必須項目です。" End If If TextBox2.Value = "0" Then MsgBox "「個数」に0は登録できません。" End If Lrow = Range("B2").CurrentRegion.Rows.Count Range("B" & Lrow + 1).Value = TextBox1.Value Range("C" & Lrow + 1).Value = TextBox2.Value End Sub Private Sub CommandButton2_Click() Unload UserForm1 End Sub Private Sub UserForm_Initialize() Dim b As Long Dim a() As String ReDim a(1 To 100) UserForm1.ListBox1.ColumnCount = 2 UserForm1.ListBox1.List = Worksheets(Sheet1).Range("B2:C").Value For i = 2 To 104 If Range("B" & i) = "" Then ListBox1.AddItem Range("B" & i).Value ListBox1.AddItem Range("c" & i).Value b = b + 1 a(b) = Range("C" & i).Value End If Next i End Sub このコードでSheet1上のコマンドボタンを押して実行しようとするとエラーが出てしまいます。 エラーの原因は何なのでしょうか? (なお、コマンドボタンのコードは「UserForm1.Show」のみです。 コード自体は本などを読みながら似たようなVBAを使った物を参考にしています。

  • Excel オーダーフォームのテキストボックス入力について

    オーダーフォームを作成し、テキストボックスを2つ以上作成し、コマンドボタンを1つ作りました。 同じ行ですべてを入力できるようにしたいのですが、どうしたらよいでしょうか? テキストボックス1の値を入力するためのコマンドは、最下位の行を探してそこに入力するようなコマンドを作っているはずです…その横の列にテキストボックス2の値を入力し、その横の列にテキストボックス3の値を入力し…というようにしていきたいのです。 Private Sub CommandButton1_Click() Dim lRow As Long With Worksheets("sheet1") lRow = .Range("A" & Rows.Count).End(xlUp).Row .Range("A" & lRow + 1).Value = TextBox1.Value End With TextBox1.Value = "" TextBox1.SetFocus End Sub

  • エクセルのマクロを教えてください。

    マクロの初心者です。 特に変数が全く使えず、下記もどのように記載していいのかわからないため教えていただけないでしょうか。 ユーザーフォームのtextbox2に開始番号があります。 textbox3に本数があります。 sheet1のB12セルには開始番号が入ります。 開始番号から本数分+1したものを順番にセルに入っていくようにしたいです。 ただ、入れたいセルが横→左下(開始番号の列)→横→左下(開始番号の列)・・・としたいため、どのように書いていいのかわかりません。 地道に書くのであれば、下記のようになると思うのですが、変数を使って書く場合はどのようになるのか教えていただけないでしょうか。 Worksheets("Sheet1").Range("B12").Value = TextBox2.Value If TextBox3.Value = 2 Then Worksheets("Sheet1").Range("G12").Value = TextBox2.Value * 1 + 1 ElseIf TextBox3.Value = 3 Then Worksheets("Sheet1").Range("G12").Value = TextBox2.Value * 1 + 1 Worksheets("Sheet1").Range("B13").Value = TextBox2.Value * 1 + 2 ElseIf TextBox3.Value = 4 Then Worksheets("Sheet1").Range("G12").Value = TextBox2.Value * 1 + 1 Worksheets("Sheet1").Range("B13").Value = TextBox2.Value * 1 + 2 Worksheets("Sheet1").Range("G13").Value = TextBox2.Value * 1 + 3 ElseIf TextBox3.Value = 5 Then Worksheets("Sheet1").Range("G12").Value = TextBox2.Value * 1 + 1 Worksheets("Sheet1").Range("B13").Value = TextBox2.Value * 1 + 2 Worksheets("Sheet1").Range("G13").Value = TextBox2.Value * 1 + 3 Worksheets("Sheet1").Range("B14").Value = TextBox2.Value * 1 + 4 ・ ・ ・ End If

  • テキスト値をExcel反映空欄を無視し連続入力

    テキストボックス1~30に入力した際、テキストの3行目をクリアーした後、実行ボタンを押したらExcelsheet1のABC列に入力できるがテキストに空欄が生じた場合、以下のコードでは空欄以降の値が入力できません。空欄は無視し続けてセルに入力するコード表示はあるのでしょうか、お解りになる方宜しくお願いします。 できればコード追加入力で行いたいのですが。 Private Sub 実行_Click() Dim i As Integer Dim LRow As Long LRow = Range("A" & Rows.Count).End(xlUp).Row For i = 1 To 10 If Me.Controls("TextBox" & i).Text = "" Then Exit For Range("A" & LRow + i).Value = Me.Controls("TextBox" & i).Text Range("B" & LRow + i).Value = Me.Controls("TextBox" & i + 10).Text Range("C" & LRow + i).Value = Me.Controls("TextBox" & i + 20).Text Next End Sub

  • Excel VBA テキストボックスを検索

    テキストボックス3に数値を入力し ExcelのA列にあるか検索をかける。 ある場合は、B列の同じ行に 「みーつけた!」と入力。 その設定で組んでみたのですが、 テキストボックス3にデータを6桁入力しようとすると 6桁目にオーバーフローエラーが出ます。 このプログラムの何処がおかしいのでしょうか? Private Sub TextBox3_Change() Dim Number As Integer If TextBox3.Value <> "" Then '空じゃない場合 Number = TextBox3.Value Call 検索(Number) MsgBox TextBox3.Value End If End Sub Sub 検索(ByVal Number As Variant) Dim FoundCell As Range Set FoundCell = Range("A:A").Cells.Find(What:=Number, lookat:=xlPart) If FoundCell Is Nothing Then Else FoundCell.Activate Range("O" & ActiveCell.Row).Value = "みーつけた!" End If End Sub

  • エクセルVBAのIf ~ Thenステートメントで

    予約フォームの作成に挑戦しています。 予約日が2022年8月1日の時のみ、シート4に結果を記入して行きたいのですが、 Private Sub CommandButton1_Click() If ListBox1.Text = "44774" Then Sheet4.Select Range("C2").End(xlDown).Offset(1, 0).Select ActiveCell.Value = Reservationform.ListBox2.Value ActiveCell.Offset(0, 1).Value = Reservationform.ListBox3.Value ActiveCell.Offset(0, 2).Value = Reservationform.ListBox4.Value ActiveCell.Offset(0, 2).NumberFormat = Range("C2").NumberFormat Exit Sub End If End Sub で、とりあえず成功しています。 "44774" の部分を、"Sheet6のA2"だった時のみ結果を記入するようにしたいです。 " "の中身をそのまま変えて、 If ListBox1.Text = "sheet6.Range("A2")" Then や If ListBox1.Text = "sheet6.Cells(2, 1).Value" Then に変えてみましたがうまく行きませんでした。 どのようにしたら良いでしょうか?

  • ユーザーフォーム上にある「テキストボックス」に小数が入力できない

    以前にユーザーフォーム上のテキストボックスにセル値反映する方法を下記(サンプル1)のようにお教えいただいたのですが、下記のようにマクロを組むとテキストボックスに小数が入力できなくなってしまいます。 どのようにしたら、テキストボックスに小数が入力できるようになるのでしょうか? お教えください。 事例)「1.234」とテキストボックスに打ち込むと「1」    「0.856」とテキストボックスに打ち込むと「0」と    なってしまいます。 (サンプル1) 'A1のデータを反映するとした場合 'OptionButton1のコード Private Sub OptionButton1_Click() TextBox1 = Sheets("Sheet1").Range("a1") End Sub 'B1に反映するとして 'OptionButton2のコード Private Sub OptionButton2_Click() TextBox1 = "" End Sub 'TextBox1のコード Private Sub TextBox1_Change() If OptionButton2 = True Then Sheets("Sheet1").Range("B1") = TextBox1.Value End If End Sub

  • エクセルVBAでユーザーフォームのテキストボックス

    ユーザーフォーム上にテキストボックスを8個設置しました。 そこに数値が入力された場合は自動的にカンマ区切りが表示されるように以下のコードを書きました。 これで希望の動きはしてくれるのですが、このやりかたは正しいでしょうか? また、テキストボックスは8個あるので、それぞれに下記のように8通りコードをかかなければいけないのでしょうか?ご教示ください。 Private Sub TextBox1_Change()   If IsNumeric(TextBox1.Value) Then Application.EnableEvents=False     TextBox1.Text = Format(TextBox1.Value, "#,##0") Application.EnableEvents=True   End If End Sub 途中(2~7)略 Private Sub TextBox8_Change()   If IsNumeric(TextBox8.Value) Then Application.EnableEvents=False     TextBox8.Text = Format(TextBox8.Value, "#,##0") Application.EnableEvents=True   End If End Sub