• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAで表作成中解らないことだらけ・・・ひとつずつ教えてください。)

VBAで表作成中解らないことだらけ・・・ひとつずつ教えてください。

このQ&Aのポイント
  • VBAを使用して表を作成している中で、理解できない点がたくさんあります。ひとつずつ教えていただけますか。
  • 質問者はVBAを使って表を作成していますが、理解できない点がたくさんあります。お手伝いいただけると助かります。
  • VBAで表を作成している途中で、わからないことがたくさんあります。どうかひとつずつ教えていただけませんか。

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

  • ベストアンサー
  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.1

引き続き 不具合等はあるかも知れませんが、 以下のマクロを追加して、試してみてください。 Private Sub CommandButton1_Click()   '一番最後に追加してください   '商品情報の編集   Call Edit_Shouhin(wSh2) '←追加 End Sub '商品情報の編集 Sub Edit_Shouhin(wSh2 As Worksheet)   Dim wC     As Integer   Dim mC     As Integer   Dim wDate    As String   Dim hNm     As String   Dim hCd     As String   Dim hKbn    As String   Dim hSu     As Integer   Dim sTot1    As Integer   Dim sTot2    As Integer   Dim aSum    As Integer   Dim Kbn1    As Integer   Dim Kbn2    As Integer   Dim wI     As Integer   Dim fflg    As Boolean   Dim wSu     As Integer   '   sTot1 = 7: sTot2 = 9: aSum = 10   Kbn1 = 6: Kbn2 = 8   With wSh2     mC = .Cells(5, 12).End(xlToRight).Column     For wC = 12 To mC       wDate = wSh2.Cells(4, wC)       '商品情報取得       Call Get_HinData(wDate, hNm, hCd, hKbn, hSu)       Select Case hKbn         Case "1"  '区分1           If .Cells(6, "B") = "" Then             .Cells(6, "B") = hNm      '商品名             .Cells(6, "I") = hCd      '商品コード             .Cells(6, wC) = hSu       '数量           Else             fflg = False             For wI = 6 To Kbn1               If .Cells(wI, "B") = hNm Then                 .Cells(wI, wC) = hSu  '数量                 fflg = True                 Exit For               End If             Next             If fflg = False Then               .Rows(sTot1).Insert Shift:=xlDown               .Cells(sTot1, "B") = hNm  '商品名               .Cells(sTot1, "I") = hCd  '商品コード               .Cells(sTot1, wC) = hSu   '数量               Kbn1 = Kbn1 + 1               Kbn2 = Kbn2 + 1               sTot1 = sTot1 + 1               sTot2 = sTot2 + 1               aSum = aSum + 1             End If           End If         Case "2"  '区分2           If .Cells(Kbn1 + 2, "B") = "" Then             .Cells(Kbn1 + 2, "B") = hNm   '商品名             .Cells(Kbn1 + 2, "I") = hCd   '商品コード             .Cells(Kbn1 + 2, wC) = hSu   '数量           Else             For wI = Kbn1 + 2 To Kbn2               If .Cells(wI, "B") = hNm Then                 .Cells(wI, wC) = hSu  '数量                 fflg = True                 Exit For               End If             Next             If fflg = False Then               .Rows(sTot2).Insert Shift:=xlDown               .Cells(sTot2, "B") = hNm  '商品名               .Cells(sTot2, "I") = hCd  '商品コード               .Cells(sTot2, wC) = hSu   '数量               Kbn2 = Kbn2 + 1               sTot2 = sTot2 + 1               aSum = aSum + 1             End If           End If       End Select     Next     '     '小計設定(区分1)     For wC = 12 To mC       wSu = 0       For wI = 6 To Kbn1         wSu = wSu + .Cells(wI, wC)       Next       .Cells(sTot1, wC) = wSu     Next     '小計設定(区分2)     For wC = 12 To mC       wSu = 0       For wI = Kbn1 + 2 To Kbn2         wSu = wSu + .Cells(wI, wC)       Next       .Cells(sTot2, wC) = wSu     Next     '合計設定     For wC = 12 To mC       wSu = .Cells(sTot1, wC) + .Cells(sTot2, wC)       .Cells(aSum, wC) = wSu     Next   End With End Sub '商品情報取得 Sub Get_HinData(wDate As String, hNm As String, hCd As String, hKbn As String, hSu As Integer)   Dim wData    As Worksheet   Dim wI     As Integer   '   Set wData = Workbooks("入力データ.xls").Worksheets("Sheet2") '←実際のブック名とシート名に変更   With wData     mR = .Cells(Rows.Count, "B").End(xlUp).Row     For wI = 3 To mR       If .Cells(wI, "B") = wDate Then     '←ここで両方の日付を確認してください         hNm = .Cells(wI, "T")         hCd = .Cells(wI, "BA")         hKbn = .Cells(wI, "M")         hSu = .Cells(wI, "AQ")         Exit For       End If     Next   End With End Sub

ka2ari1226
質問者

補足

すみません・・・ ありがとうございます。 初心者っていうのもありよくわからないんですが・・・ ひとつずつ説明していただいてもいいですか? ほんとすみません・・・ 品名、コード、数値、貼り付けされませんでした・・・。 説明不足だった場合すみません・・・。 入力データからの貼り付けってどこでされているのでしょうか・・・? 品名とコードを入れる際にセルが結合してあるんですが表示されないのと何か関係あるのでしょうか? お手数ですがひとつずつよろしくお願いします

その他の回答 (2)

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.3

ここでは、正しく商品情報が区分通りで追加設定及び小計、合計まで計算されます。 なので、何処かの仕様が合わないかも知れませんので、デバッグで一つ一つ確認してみてください。 Private Sub CommandButton1_Click()   '商品情報の編集   Call Edit_Shouhin(wSh2) '←ここでデバッグしてください。(PF9を押す) End Sub 上記の Call Edit_Shouhin(wSh2) で止まりますので、「PF8→1行づづ実行」を押しながら データの設定などを確認してくださいね。 Sub Edit_Shouhin(wSh2 As Worksheet) このモジュールの頭から正しく全てが通るかを確認、wDate 変数に正しく日付が設定されるかなど・・・

ka2ari1226
質問者

お礼

ありがとうございます!! VBA 表作成 続続 というタイトルで再び立ち上げました。 よろしくお願いします

ka2ari1226
質問者

補足

ありがとうございます。 今パソコンと実際に使っているパソコンが違うためできませんが、明日、やってみて再度わからないところがあれば質問させていただきます。 いったん締めさせていただきますね♪ また同じタイトルで出すのでその時はよろしくお願いします。 私自身ネットで調べたところFindを使うと思っていたので・・・(苦笑) 予想が外れました;; これを簡単に示すことはできないんですよね? わかりやすく簡潔?に…みたいな

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.2

商品情報が表示されないのは、多分検索処理だと思います。 以下のモジュールの中で '商品情報の編集 Sub Edit_Shouhin(wSh2 As Worksheet)  If .Cells(wI, "B") = wDate Then   '←ここで両方の日付を確認してください コメントしたように、デバッグしてみてください。 この行で「F9」を押すと色反転されます。実行するとここで止まりますので、 マウスで、両方の日付形を確認してみてください。 例えば、.Cells(wI, "B") → "mm/dd" の形式     wDate → "yyyy/mm/dd"  だと駄目ですので、両方のTypeを合わせる必要があります .Cells(wI, "B") → "mm/dd" / wDate → "yyyy/mm/dd" の場合は、  If .Cells(wI, "B") = Format(wDate,"mm/dd") Then に修正してください。

ka2ari1226
質問者

補足

できたんですが、デバック表示にはならなっかたんですが・・・ 日付を1ヶ月貼り付けたブックで 6行目 B列と数値は入っているもののコードが入っていません。 挿入された部分が6行目とは違い結合されていなく、コードの場所もなくなってしまいました。数値も挿入された部分は全て同じ数値になってしまいます。 区分2も貼り付けがされていませんでした。 出来たのは日付が一致しないときのみの表作成はできました。 しかし一致する際の表ができていません・・・。 この表示で解りますでしょうか? 自分でも何言ってるかわからないんですが;; ひとつずつでもいいですか? 1つ目 区分2の品名とコードが表示されません。 コードが表示されません。 2つ目 挿入された際の貼り付けが表示されません。 3つ目 数値が指定された一致したところだけの貼り付けが全てに貼り付けられています。 今わかるのはこの3つです。 忙しいと思いますがよろしくお願いします。