Excel VBA質問箱 IV

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

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


7796 / 13645 ツリー ←次へ | 前へ→

【36687】データ入力について ワイン 06/4/7(金) 23:31 質問[未読]
【36688】Re:データ入力について かみちゃん 06/4/8(土) 0:25 回答[未読]
【36689】Re:データ入力について ワイン 06/4/8(土) 0:55 発言[未読]
【36690】Re:データ入力について かみちゃん 06/4/8(土) 1:07 発言[未読]
【36691】Re:データ入力について ワイン 06/4/8(土) 8:27 質問[未読]
【36696】Re:データ入力について Kein 06/4/8(土) 13:29 回答[未読]
【36697】Re:データ入力について ワイン 06/4/8(土) 13:58 お礼[未読]
【36788】Re:データ入力について ワイン 06/4/13(木) 20:56 質問[未読]
【36792】Re:データ入力について Kein 06/4/13(木) 23:27 回答[未読]
【36838】Re:データ入力について ワイン 06/4/14(金) 22:06 お礼[未読]

【36687】データ入力について
質問  ワイン  - 06/4/7(金) 23:31 -

引用なし
パスワード
   すみません。
連続になりますが教えて下さい。
コンボボックスの入力内容をdataというシートに保存したいのですが、
以下のコードだと、毎回列2に書き込まれてしまいます。
2行目、3行目と保存していきたい場合はどうしたら良いのでしょうか?
また、A、B、C、D行に同じ項目があれば自動的に、kosuuだけ足してその
列に保存することは可能でしょうか?
ご教授下さい。


Private Sub CommandButton2_Click()
Dim maker As String
Dim hinnbann As String
Dim atumi As String
Dim sunnpou As String
Dim kosuu As Variant

maker = ComboBox1.Text
hinnbann = ComboBox2.Text
atumi = ComboBox3.Text
sunnpou = ComboBox4.Text
kosuu = ComboBox5.Text
Sheets("data").Select
  Range("A2").FormulaR1C1 = maker
  Range("B2").FormulaR1C1 = hinnbann
  Range("C2").FormulaR1C1 = atumi
  Range("D2").FormulaR1C1 = sunnpou
  Range("E2").FormulaR1C1 = kosuu
  Unload Me
Worksheets("menu").Activate
  MsgBox "入力完了", vbOKOnly, SoftName
    End Sub

【36688】Re:データ入力について
回答  かみちゃん  - 06/4/8(土) 0:25 -

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

>コンボボックスの入力内容をdataというシートに保存したいのですが、
>以下のコードだと、毎回列2に書き込まれてしまいます。
>2行目、3行目と保存していきたい場合はどうしたら良いのでしょうか?

以下のように、最終行を取得してから、転記します。
また、コードも以下のようにまとめることができます。

Private Sub CommandButton2_Click()
 Dim Rng As Range

 Set Rng = Sheets("data").Range("A65536").End(xlUp).Offset(1)
 Rng.reszie(, 5).Value = Array(Me.ComboBox1.Text, _
                Me.ComboBox2.Text, _
                Me.ComboBox3.Text, _
                Me.ComboBox4.Text, _
                Me.ComboBox5.Text)
 Unload Me
 Sheets("menu").Activate
 MsgBox "入力完了", vbOKOnly, SoftName
End Sub

>また、A、B、C、D行に同じ項目があれば自動的に、kosuuだけ足してその
>列に保存することは可能でしょうか?

同じ項目というのは、直前の行と同じ値であればということでいいですか?

【36689】Re:データ入力について
発言  ワイン  - 06/4/8(土) 0:55 -

引用なし
パスワード
   ありがとうございます。

> Rng.reszie(, 5).Value = Array(Me.ComboBox1.Text, _
>                Me.ComboBox2.Text, _
>                Me.ComboBox3.Text, _
>                Me.ComboBox4.Text, _
>                Me.ComboBox5.Text)

さっそくスリムなコードを試してみましたが、上記のところが入力時に
エラーとなり、サポートしていません、と出ます。

>>また、A、B、C、D行に同じ項目があれば自動的に、kosuuだけ足してその
>>列に保存することは可能でしょうか?
>
>同じ項目というのは、直前の行と同じ値であればということでいいですか?

dataシートの一つの列にコンボボックス1〜4までと、まったく同じデータ
がある場合その列のEの数字とコンボボックス5を足して、その列のEに返したい
ので、

   A      B     C     D     E
1  メーカー  品番    厚み   サイズ   個数
2  三菱    5021    30     50     40
3  三菱    5021    30     50     100

とはならずに、 


   A      B     C     D     E
1  メーカー  品番    厚み   サイズ   個数
2  三菱    5021    30     50    140

としたいのですが、
表現が下手でもうしわけないです。

【36690】Re:データ入力について
発言  かみちゃん  - 06/4/8(土) 1:07 -

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

>> Rng.reszie(, 5).Value = Array(Me.ComboBox1.Text, _
>>                Me.ComboBox2.Text, _
>>                Me.ComboBox3.Text, _
>>                Me.ComboBox4.Text, _
>>                Me.ComboBox5.Text)
>
>さっそくスリムなコードを試してみましたが、上記のところが入力時に
>エラーとなり、サポートしていません、と出ます。

申し訳ありません。
スペルミスを確認しないまま提示してしまいました。
Rng.reszie(, 5).Value

Rng.Resize(, 5).Value
としてください。

>>>また、A、B、C、D行に同じ項目があれば自動的に、kosuuだけ足してその
>>>列に保存することは可能でしょうか?
>>
>>同じ項目というのは、直前の行と同じ値であればということでいいですか?
>
>dataシートの一つの列にコンボボックス1〜4までと、まったく同じデータ
>がある場合その列のEの数字とコンボボックス5を足して、その列のEに返したい
>ので、

新たに転記する行の一行上と同じであればなのか?
それよりも上の行ともチェックするのか?
例示のデータだとデータが1行しかないので、釈然としません。
たとえば、今回転記する行が4行目だったとします。
3行目と同じ値であれば、3行目の個数に加算します。
もし、1行目にも同じ値があればどうするのですか?

【36691】Re:データ入力について
質問  ワイン  - 06/4/8(土) 8:27 -

引用なし
パスワード
   >Rng.reszie(, 5).Value
>を
>Rng.Resize(, 5).Value
>としてください。

ありがとうございます。
見事に動きました。
>

>新たに転記する行の一行上と同じであればなのか?
>それよりも上の行ともチェックするのか?
>例示のデータだとデータが1行しかないので、釈然としません。
>たとえば、今回転記する行が4行目だったとします。
>3行目と同じ値であれば、3行目の個数に加算します。
>もし、1行目にも同じ値があればどうするのですか?

一つ上の行ではなく、その都度同じ値があるかどうか全ての行から調べるので、
3行目を入力した時点で、1行目のE列に個数が加算するとういようなイメージ
です。

【36696】Re:データ入力について
回答  Kein  - 06/4/8(土) 13:29 -

引用なし
パスワード
   dataシートのAA列を作業列として数式を入れ、ComboBox1〜ComboBox4の値を
繋ぎ合わせた文字列と比較して、一致した行があったらそのE列にComboBox5の
値を加算、一致しなかったら最終入力行 + 1へ新規に追加する。
というコードを提示してみます。

Private Sub CommandButton2_Click()
  Dim MxR As Long
  Dim Ary As Variant, CkR As Variant
  Dim CkSt As String
 
  Ary = Array(ComboBox1.Text, ComboBox2.Text, _
  ComboBox3.Text, ComboBox4.Text)
  With Worksheets("data")
   MxR = .Range("A65536").End(xlUp).Row
   If MxR = 1 Then
     .Range("A2:D2").Value = Ary
     .Range("E2").Value = Val(ComboBox5.Text)
   Else
     If IsEmpty(.Cells(MxR, 27).Value) Then
      .Range(.Cells(2, 27), .Cells(MxR, 27)).Formula = _
      "=CONCATENATE($A2,"","",$B2,"","",$C2,"","",$D2)"
     End If
     CkSt = Join(Ary, ",")
     CkR = Application.Match(CkSt, .Columns(27), 0)
     If IsError(CkR) Then
      .Range(.Cells(MxR + 1, 1), .Cells(MxR + 1, 4)) _
      .Value = Ary
      .Cells(MxR + 1, 5).Value = Val(ComboBox5.Text)
     Else
      .Cells(CkR, 5).Value = _
      .Cells(CkR, 5).Value + Val(ComboBox5.Text)
     End If
   End If
  End With
  Worksheets("menu").Activate
  MsgBox "入力完了", 64
End Sub

【36697】Re:データ入力について
お礼  ワイン  - 06/4/8(土) 13:58 -

引用なし
パスワード
   ありがとうございます。
見事、私がイメージしてたものができました。

【36788】Re:データ入力について
質問  ワイン  - 06/4/13(木) 20:56 -

引用なし
パスワード
   再びすみません。
この間、教えてもらいましたコードで、コンボボックス13が一つ増えたため、
自分なりに考えて下記のように改造したのですが、動作確認時に何故か
コンボ13の内容をG列に反映させたいのですが、G列にコンボ1の内容が
反映されてしまいます。
どこが違うのか教えて下さい。

Private Sub CommandButton2_Click()

Dim MxR As Long
  Dim Ary As Variant, CkR As Variant
  Dim CkSt As String
 
  Ary = Array(ComboBox1.Text, ComboBox2.Text, _
  ComboBox3.Text, ComboBox4.Text, ComboBox5.Text, ComboBox13.Text)
                      ’治したとこ
  With Worksheets("data")
   MxR = .Range("A65536").End(xlUp).Row
   If MxR = 1 Then
     .Range("A2:E2,G2").Value = Ary         '治したとこ
     .Range("F2").Value = Val(ComboBox6.Text)    '治したとこ
   Else
     If IsEmpty(.Cells(MxR, 27).Value) Then
      .Range(.Cells(2, 27), .Cells(MxR, 27)).Formula = _
      "=CONCATENAT($A2,"","",$B2,"","",$C2, _
           "","",$D2,"","",$E2,"","",$G2)" '治したとこ
     End If
     CkSt = Join(Ary, ",")
     CkR = Application.Match(CkSt, .Columns(27), 0)
     If IsError(CkR) Then
       Union(.Range(.Cells(MxR + 1, 1), .Cells(MxR + 1, 5)) _
      , .Cells(MxR + 1, 7)).Value = Ary '治したとこ
      .Cells(MxR + 1, 6).Value = Val(ComboBox6.Text)
     Else
      .Cells(CkR, 6).Value = _
      .Cells(CkR, 6).Value + Val(ComboBox6.Text)
     End If
   End If
  End With
  Worksheets("menu").Activate
  MsgBox "入力完了", 64
End Sub

【36792】Re:データ入力について
回答  Kein  - 06/4/13(木) 23:27 -

引用なし
パスワード
   配列というのは、あくまで順番に並んでいないとダメなのです。だから
>.Range("A2:E2, G2").Value = Ary
というように、F2 を飛ばして G2 に入れることはできません。
面倒でも以下のように、各ComboBoxの値を変数に入れ「配列として使えるところだけ」
配列を作って使うようにするしかありません。

Private Sub CommandButton2_Click()
  Dim MxR As Long
  Dim Ary As Variant, CkR As Variant
  Dim CkSt As String, Tx1 As String
  Dim Tx2 As String, Tx3 As String
  Dim Tx4 As String, Tx5 As String
  Dim Tx6 As String, Tx13 As String

  Tx1 = ComboBox1.Text: Tx2 = ComboBox2.Text
  Tx3 = ComboBox3.Text: Tx4 = ComboBox4.Text
  Tx5 = ComboBox5.Text: Tx6 = ComboBox6.Text
  Tx13 = ComboBox13.Text
  Ary = Array(Tx1, Tx2, Tx3, Tx4, Tx5)
  With Worksheets("data")
   MxR = .Range("A65536").End(xlUp).Row
   If MxR = 1 Then
     .Range("A2:E2").Value = Ary
     .Range("G2").Value = Tx13
     .Range("F2").Value = Val(Tx6)
   Else
     If IsEmpty(.Cells(MxR, 27).Value) Then
      .Range(.Cells(2, 27), .Cells(MxR, 27)).Formula = _
      "=CONCATENATE($A2,$B2,$C2,$D2,$E2,$G2)"
     End If
     CkSt = Join(Ary, "") & Tx13
     CkR = Application.Match(CkSt, .Columns(27), 0)
     If IsError(CkR) Then
      .Range(.Cells(MxR + 1, 1), .Cells(MxR + 1, 5)) _
      .Value = Ary
      .Cells(MxR + 1, 6).Value = Val(Tx6)
      .Cells(MxR + 1, 7).Value = Tx13
     Else
      .Cells(CkR, 6).Value = _
      .Cells(CkR, 6).Value + Val(Tx6)
     End If
   End If
  End With
  Worksheets("menu").Activate
  MsgBox "入力完了", 64
End Sub

【36838】Re:データ入力について
お礼  ワイン  - 06/4/14(金) 22:06 -

引用なし
パスワード
   度々ありがとうございました。
文字なので&で繋げないといけなかったのですね。
とても勉強になりました。

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