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

解決済みの質問

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

エクセルマクロ初心者です。(2003使用_ユーザーフォーム)
ユーザーフォームにリストボックスとテキストボックスを配置しています。リストボックス(Sheet1データを反映)の管理番号データを取得し、Sheet2のA1最終行に記載するところまではできました。

その後、もしテキストボックス1に日付型データ(回答日)があれば、先ほどの管理番号取得行の列のとなり(B列)に記載、空白であれば記載しない。
もしテキストボックス2に日付型データ(出荷予定日)があれば、先ほどの管理番号取得行の列のとなり(C列)に記載、空白であれば記載しない。
もしテキストボックス3にデータ(数量)があれば、先ほどの管理番号取得行の列のとなり(C列)に記載、空白であれば記載しない。

としたいのですが、offsetを使おうとしたのですが、うまくできませんでした。
すみませんが、どなたかご親切な方ご教授よろしくお願いいたします。


(エクセルSheet1=データベース)
C5  D5
管理番号   品名
      アカ12   りんご
      アオ56   みかん
      クロ34   なし
      クロ89   すいか
      アオ12   もも

(エクセルSheet2=記入シート)
管理番号回答日     出荷予定日数量
アカ129月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(コメント=送り先一部変更あり)

すみませんが、どなたかご親切な方ご教授よろしくお願いいたします。

投稿日時 - 2009-10-04 15:45:39

QNo.5341267

困ってます

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

> お手数ですが、テキストボックスで文字を反映させる関数も

ちょっと意味が分かりかねますが、文字として判定したいと言うことでしょうか

If VarType(TextBox4.Value) = vbString Then
.Range("D" & lRow + 1).Value = TextBox4.Value
End If



If Not IsNumeric(TextBox4.Value) Then
.Range("E" & lRow + 1).Value = TextBox4.Value
End If

それか両方とも判定条件として

If Not IsNumeric(TextBox4.Value) And VarType(TextBox4.Value) = vbString Then
.Range("E" & lRow + 1).Value = TextBox4.Value
End If

とかでしょうか

投稿日時 - 2009-10-04 18:38:49

お礼

ご丁寧な回答、本当にありがとうございました。
.Range("K" & lRow + 1).Value = TextBox4.Valueでできました。
助かりました。ありがとうございます。

投稿日時 - 2009-10-04 22:04:48

ANo.3

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

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

回答(3)

ANo.2

訂正

.Range("A" & lRow + 1).Value = ListBox1.List(1, 2)

じゃなくて

.Range("A" & lRow + 1).Value = ListBox1.List(ListBox1.ListIndex, 2)

でした

投稿日時 - 2009-10-04 16:49:06

補足

早急のご回答どうもありがとうございます。

テキストボックス4(コメント = 送り先一部変更あり)
を追加したいと思い、IsDateなどにかわる文字関数があるか調べたのですが、どうしても応用がききませんでした。
お手数ですが、テキストボックスで文字を反映させる関数も教えていただきたく、よろしくお願いいたします。

投稿日時 - 2009-10-04 17:53:09

ANo.1

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(1, 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
End With
End Sub

でいかがですか

投稿日時 - 2009-10-04 16:47:10

あなたにオススメの質問