Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6213 / 13646 ツリー ←次へ | 前へ→

【46548】ユーザーフォームに入力されたデータを特定のシートの特定のセルに転記する... 白髪男 07/2/6(火) 14:26 質問[未読]
【46566】Re:ユーザーフォームに入力されたデータを... かみちゃん 07/2/6(火) 21:20 発言[未読]
【46579】Re:ユーザーフォームに入力されたデータを... 白髪男 07/2/7(水) 10:55 質問[未読]
【46580】Re:ユーザーフォームに入力されたデータを... かみちゃん 07/2/7(水) 13:00 発言[未読]
【46585】Re:ユーザーフォームに入力されたデータを... 白髪男 07/2/7(水) 14:43 質問[未読]
【46591】Re:ユーザーフォームに入力されたデータを... かみちゃん 07/2/7(水) 16:12 発言[未読]
【46592】Re:ユーザーフォームに入力されたデータを... 白髪男 07/2/7(水) 16:39 お礼[未読]

【46548】ユーザーフォームに入力されたデータを特...
質問  白髪男  - 07/2/6(火) 14:26 -

引用なし
パスワード
   VBAプログラミングの勉強を始めたばかりなんですが、
思うようにうまくいかなくて悩んでおります。
さて、文章ではうまく書けませんので、下記のように例示させていただきます。


ユーザーフォーム             仕入品管理表(転記先のシート名)
 ラベル    入力型           転記先のセル
 1.区分    ComBox1   →       A:3            
        リストには
        A,Bが入っているとします。

 2.集計日   TextBox2   →       D:3  

 3.部署名   TextBox3   →       E:3          

 4.科目番号  ComBox2   →       A:8
        リストには
        1,2,3,4が入っているとします。

 5.取引先   TextBox4   →       D:8

 6.商品名   TextBox5   →       E:8

 7.数量    TextBox6   →       F:8

 8.仕入金額  TextBox7   →       G:8


 科目番号に対応した分類、種類がそれぞれB列,C列(8行以降)にそれぞれ自動的 に転記されるようにしてあります。
 1.から3.までのデータの転記先のセルは固定されているものとします。
 次に、登録ボタン(cmd_Click)をクリックすると同時に4.から8.までのデー  タが8行以降1行ずつ追加されるという形で仕入品管理表に転記されるようにし たいのです。
 なお、ブックは仕入管理.xslとします。

以上の仕様を満たすためのコードをどのように書けばよいかお分かりになる方がおられましたら、教えていただけますでしょうか。
わかりづらい説明で大変申し訳ありませんが、私の意図をお汲み取りいただけますようお願いいたします。

【46566】Re:ユーザーフォームに入力されたデータ...
発言  かみちゃん  - 07/2/6(火) 21:20 -

引用なし
パスワード
   こんにちは。かみちゃん です。

> 登録ボタン(cmd_Click)をクリックすると同時に4.から8.までのデータが8行
> 以降1行ずつ追加されるという形で仕入品管理表に転記されるようにしたい

登録ボタンがCommandButton1
仕入品管理表がSheet1
とした場合、以下のようなコードをUserFormモジュールに記述することでできると思います。

ただし、以下のように7行目には、タイトルを記述しておいてください。
特に、A7セルの値は、重要です。最終行を決めているポイントになっています。
   A    B  C  D   E   F    G
6
7 科目番号     取引先 商品名 数量 仕入金額
8

Private Sub CommandButton1_Click()
 With Sheets("Sheet1")
  .Range("A3").Value = Me.ComboBox1.Value
  .Range("D3").Value = Me.TextBox2.Value
  .Range("E3").Value = Me.TextBox3.Value
  With Cells(Rows.Count, 1).End(xlUp).Offset(1)
   .Value = Me.ComboBox2.Value
   .Offset(, 3).Resize(, 4).Value = _
    Array(Me.TextBox4.Value, _
       Me.TextBox5.Value, _
       Me.TextBox6.Value, _
       Me.TextBox7.Value)
  End With
 End With
End Sub

【46579】Re:ユーザーフォームに入力されたデータ...
質問  白髪男  - 07/2/7(水) 10:55 -

引用なし
パスワード
   ▼かみちゃん さん:

かみちゃん、おはようございます。白髪男です。
下記のコードの通りに記述してみましたら、拍子抜けしたほどうまくいきました(笑)。そして、物凄く感動しました。
コードが15行しか書かれていないのに動作するなんてと不思議に思いました。
VBAに関してはずぶ素人ですからね。
すばらしいコードをお示しいただきまして本当にありがとうございました。
m(_ _)m

初歩的なことで申し訳ありませんが、恥を忍んで質問させていただきます。
ComboBoxのリストを表示させようとしたのですが、うまくいきませんでした。
コードの書き方がわからなくて・・・。

ユーザーフォームのComboBox1のリストにA,Bと表示されるようにしたいのですが、どうしたらよいかご教示いただけますでしょうか。


>> 登録ボタン(cmd_Click)をクリックすると同時に4.から8.までのデータが8行
>> 以降1行ずつ追加されるという形で仕入品管理表に転記されるようにしたい
>
>登録ボタンがCommandButton1
>仕入品管理表がSheet1
>とした場合、以下のようなコードをUserFormモジュールに記述することでできると思います。
>
>ただし、以下のように7行目には、タイトルを記述しておいてください。
>特に、A7セルの値は、重要です。最終行を決めているポイントになっています。
>   A    B  C  D   E   F    G
>6
>7 科目番号     取引先 商品名 数量 仕入金額
>8
>
>Private Sub CommandButton1_Click()
> With Sheets("Sheet1")
>  .Range("A3").Value = Me.ComboBox1.Value
>  .Range("D3").Value = Me.TextBox2.Value
>  .Range("E3").Value = Me.TextBox3.Value
>  With Cells(Rows.Count, 1).End(xlUp).Offset(1)
>   .Value = Me.ComboBox2.Value
>   .Offset(, 3).Resize(, 4).Value = _
>    Array(Me.TextBox4.Value, _
>       Me.TextBox5.Value, _
>       Me.TextBox6.Value, _
>       Me.TextBox7.Value)
>  End With
> End With
>End Sub

【46580】Re:ユーザーフォームに入力されたデータ...
発言  かみちゃん  - 07/2/7(水) 13:00 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>ComboBoxのリストを表示させようとしたのですが、うまくいきませんでした。

どのようにして、どのようにうまくいかなかったのでしょうか?
以下のようなコードをUserFormモジュールに記述するとできると思います。

Private Sub UserForm_Initialize()
 Me.ComboBox1.AddItem "A"
 Me.ComboBox1.AddItem "B"
End Sub

【46585】Re:ユーザーフォームに入力されたデータ...
質問  白髪男  - 07/2/7(水) 14:43 -

引用なし
パスワード
   こんにちは。白髪男です。

Private Sub UserForm_Initialize()
 Me.ComboBox1.AddItem "A"
 Me.ComboBox1.AddItem "B"
 Me.ComboBox2.AddItem "1"
 Me.ComboBox2.AddItem "2"
 Me.ComboBox2.AddItem "3"
 Me.ComboBox2.AddItem "4"
End Sub
上記のように記述してみましたが、問題なく動作しました。
ありがとうございました。

ところで、 

  「 With Cells(Rows.Count, 1).End(xlUp).Offset(1)
    .Value = Me.ComboBox2.Value
     .Offset(, 3).Resize(, 4).Value = _」の
   .Offset(, 3).Resize(, 4).Value の意味について
  わかりやすいようにご説明願えませんでしょうか。

また、質問するかもしれませんが、よろしくお願いいたします。

【46591】Re:ユーザーフォームに入力されたデータ...
発言  かみちゃん  - 07/2/7(水) 16:12 -

引用なし
パスワード
   こんにちは。かみちゃん です。

> .Offset(, 3).Resize(, 4).Value の意味について
> わかりやすいようにご説明願えませんでしょうか。

ヘルプは確認されましたでしょうか?
以下のサンプルコードを新規ブックで実行してみていただくとわかるかと思
います。

Sub Sample2()
 Range("A1").Select
 MsgBox Selection.Address
 
 Range("A1").Offset(, 3).Select
 MsgBox Selection.Address
 
 Range("A1").Offset(, 3).Resize(, 4).Select
 MsgBox Selection.Address
 
 Range("A1").Offset(2, 3).Resize(2, 4).Select
 MsgBox Selection.Address
End Sub

【46592】Re:ユーザーフォームに入力されたデータ...
お礼  白髪男  - 07/2/7(水) 16:39 -

引用なし
パスワード
   ▼かみちゃん さん:


早速ご回答いただきましてありがとうございます。

繰返し実行してみましたが、なかなか呑み込めないというのが正直なところです。

ヘルプなどで調べさせていただきます。理解するのに時間がかかるかもしれませんが・・・。

お手数をおかけしまして申し訳ありませんでした。

>ヘルプは確認されましたでしょうか?
>以下のサンプルコードを新規ブックで実行してみていただくとわかるかと思
>います。
>
>Sub Sample2()
> Range("A1").Select
> MsgBox Selection.Address
> 
> Range("A1").Offset(, 3).Select
> MsgBox Selection.Address
> 
> Range("A1").Offset(, 3).Resize(, 4).Select
> MsgBox Selection.Address
> 
> Range("A1").Offset(2, 3).Resize(2, 4).Select
> MsgBox Selection.Address
>End Sub

6213 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free