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

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

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

ブックの種類 入力フォーム→日付を設定するフォーム画面です。 book→予め出来ている表(B5・B7・B9・B10・I5はタイトル?になります)    B  I   L ・・・ 4         日付・・・ 5 商品名 コード 曜日・・・ 6 商品名 コード 数値・・・ 7   小計    数値・・・ 8 商品名 コード 数値・・・ 9   小計    数値・・・ 10  合計    数値・・・ 入力データ→日付(曜日)、区分、商品名、商品数、コードが表になっています。 まず入力フォームで日付をセットします。 次にbookに入力フォームで入力した日付から1ヶ月間を表示させます。 (1) 日付設定表に設定日付をキーにして入力データブックより検索 (2) 検索日付が一致すれば、該当商品名、コード、区分、商品数等を取得 (3) 区分:1の場合は、該当日付の下の6行に、区分:2の場合は、8行に設定(同一商品の場合は加算) 但し、新しい商品の場合は行を追加→ 区分:1の場合は6行以降に、区分:2)の場合は8行以降に追加する (4)区分ごとの小計を表示 (5)合計を表示 (6)bookのみ処理した日付と時間で保存 (7)入力データのブックを閉じる。 出来ているところは日付を貼り付けるまでは教えてもらいながらですができています。 明日中とのことなのでよろしくお願いします。

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

  • ベストアンサー
  • 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つです。 忙しいと思いますがよろしくお願いします。

関連するQ&A

  • VBA 表作成 再 続

    引き続きよろしくお願いします。 入力データというブックがありそこには B列に日付と曜日(日付の下)3行目~、 M列に区分(1か2が入力)3行目~、 T列に商品名3行目~、 AQ列に商品数3行目~、 BA列4行目~にコードが入力されています。 日付を入力したブックに 入力データにある、日付の部分を見て入力フォームで日付から1ヶ月の間の日付で一致すれば、商品名、コードを別ブックにある表に貼り付けます。日付部分の表に数値を商品名とコードにあわせて貼り付け、日付も、商品名もコードも同じであれば足してから表示します。 元にあるのはひとつ分しかはいらないので増えるたびに行数を挿入していくようにします。 最初にある表は    B   M   L ・・・ 4          日付・・・ 5          曜日・・・ 6  商品名 コード 数値・・・ 7          小計・・・ 8  商品名 コード 日付・・・ 9          小計・・・  10         合計・・・ という表になっています。上段には区分1、下段には区分2のものが入ります。 わかりますかね・・・;; 説明下手で申し訳ありません よろしくお願いします

  • VBA 表作成 続続

    以前何度もこの「VBA表作成」というタイトルで何度か質問させていただきました。 前回の締め切りのあと何度もデバック?やってみながら訂正してみたりしたのですが出来ませんでした。 ☆詳細(仕様?) ・入力フォームブックで日付を入力すると出力ブックに入力した日付から1ヶ月の日付が表示されます。 ・入力データブックがあり入力フォームで入力した日付から1ヶ月の日付で入力データにあるデータを貼り付けます。 ・重複したデータは足して表示させます。 ☆入力データブック ・B列に日付:日付の下に曜日が表示されています。 ・M列に区分:1か2が書いてあります。 ・T列に商品名:結合は関係ないとは思いますが、TからAPまで結合されています。 ・AQ列に数量:AQからAUまで結合されています。 ・BA列にコード:表示上記4つに比べ1行下に表記されていてBAからBDまで結合されています。 ☆出力ブック ・BからHまで結合されており、B6に商品名が表示されます。(現時点では商品1つ分しかないので増えるたびに1行ずつセルが結合され挿入されます ・IからKまで結合されており、I6にコードが表示されます。(これも上記と同じ) ・6行目~→区分1の場合・8行目~→区分2の場合に表示します。 (1)出力ブック(以下book)の表は品名とコードを表示する部分が結合されているのですが、挿入され別の値が表示となったときに結合されておらず、コードも表示されませんでした。 (2)入らないはずの所に数値が入ってしまいます。 (3)入るはずの所に値が表示されません(8行目以降の欄) ・品名:B5からH5まで結合されています。 品名が表示されるのはB6からH6までで挿入されるときも結合されて表示されたいです。 ・コード:I5からK5まで結合されています。 コードが表示されるのはI6からI6までで挿入されるときも結合されて表示されたいです。 Sub Get_nyuryoku(wDate As String, hNm As String, hCd As String, hKbn As String, s As Integer) Dim wData As Worksheet Dim i As Integer Dim mR As Long Set wData = Workbooks("入力データ.xls").Worksheets("Sheet1") With wData mR = .Cells(Rows.Count, "B").End(xlUp).Row For i = 3 To mR If .Cells(i, "B") = wDate Then '←ここで両方の日付を確認 hNm = .Cells(i, "T")  ←商品名 hCd = .Cells(i, "BA") ←コード hKbn = .Cells(i, "M") ←区分 s = .Cells(i, "AQ")  ←数量 Exit For End If Next End With End Sub お手数掛けますがよろしくおねがいします。 他に書かなきゃいけないことがありましたら言ってください。

  • VBA 表作成

    こんにちわ。 表が完成しました。 しかし、後3つの課題が残されています。 ネットで見ても今ひとつわからなかったので再度質問させていただきました。ブックは全部で3つになります。 →入力フォーム、出力、入力 質問1 アラートは表示されずに上書きもなく保存させたいです。 ・入力フォームで入力された日付で保存。(入力する場所はC6でyyyy/m/d/という形です。) ・同じ日付の場合は上書きではなくその日付に何か解るように足せられたものが名前になるようにしたいです。 保存のやり方はわかるのですが上記2つが解りません 質問2 保存が終わって指定したブックのみ閉じたい。 ・入力データを閉じたいです。 解りづらいかもしれませんがよろしくお願いします。

  • VBA 表作成したい

    こんにちわ 別ブックで入力した値から1ヶ月分の日付を表示させていく表を作成したいのです。 すでに表の元は完成していて、31日入るようになっています。 線もひいてあります。 ですが、入力日によっては31日の所もあれば30日の場合もあり、28日の時や29日の時もあると思うんです。 それに対応する形で表に埋まった日付の分だけの表をVBAで作成したいのですが、処理をするたびに随時変更できるのでしょうか?

  • エクセルVBA ユーザーフォーム 検索

    現在VBAにてユーザーフォームにて入力したデータをシート1に転記するものを作成しました。 この転記したデータを生かして作業したいと考えております。 データは商品データで A    B C E F 商品コード 商品名  区分  単価  備考 となっており ユーザーフォームも TEXTBOX1=A TEXTBOX2=B と言う様になってます。 現在考えているのがこのデータの一部を変更したい場合、コマンドボタンを押すと商品コード入力用boxがでてきて、商品コードを入力するとA列から検索し該当する商品データをユーザーフォーム上に表示するようにしたいのです。 そのデータがA75行にあったとします。 そのユーザーフォーム上で単価を変更した場合検索した行(A75行)にそのまま上書きする様にしたいです。 説明がうまくできてないかも知れませんが、どなたかご教授願います。

  • 集計表の作成

    集計表の作成 AccessとExcelを使用して集計Aを作成したいと思っています。 (ボタン1クリックだけで行なうのが理想です) 1.グループ毎に小計行を追加したい(小計行はグループ毎の合計 2.エクスポートしたExcelの最終に合計行の追加したい (合計行は全グループの合計) A列はデータ数によって毎回行数が変わる為にあらかじめレイアウトを 作成して、Vlookuopで当てはめるという事も出来ません。 元となる金額のデータはAccessで作成してExcelにエクスポートする 所までは出来たのですがそれ以降(小計行の追加・計算、合計行の追加・計算)が分かりません。どの様にすればよいでしょうか? Access:仕入先テーブル コード |テキスト型 名称 |テキスト型 仕入額 |数値型 前年比 |数値型 グループ |数値型 Excel:集計A A | B | C | D | E | F | 1 |コード | 名称 |仕入額 |前年比|グループ| 2 |1030 | A | 1,000 | 49%|1 | 3 |1040 | B | 1,050 | 32%|1 | 4 | |小計(A+B) | 2,050 | 81%| 5 |1050 | C | 1,000 | 50%|2 | 6 |1060 | D | 1,050 | 52%|2 | 7 |1070 | E | 1,050 | 49%|2 | 8 | |小計(C+D+E)| 3,100|50.3%| 9 |1080 | F | 1,000 | 60%| | 10|1090 | G | 2,000 | 38%| | 11|2000 | H | 1,000 | 60%| | ・ ・ ・ ・ | |合計 | 9,150 |49% | ・・・C4+C8+C9+合計行の直前まで

  • VBA表作成 再

    頭がこんがらがってしまい途中でしめさせていただきました。改めて整理がついたので質問をしたいと思います。 VBAを使い表を作成しています。 まず入力フォームというブックがあり、そこに入力した日付より1ヶ月分のデータを日付、曜日などを別ブックにある予めできている表に貼り付けていきます。表には31日分の表(罫線あり)が出来ています。 ☆一つ目 Datediff("d",wSh1.Range("C6"),Dateadd("m",1,wSh1range("C6"))) を使いその月の日数を求め表からいらない分の表を削除。 例えば)2/1を入力した際に31日分もいらないため2つ削除。 削除したら入力した日付から1ヶ月間の日付と曜日を貼り付ける。 表は   L ・・・ 4 日付・・・ 5 曜日・・・ ・ ・ ・ のようになっています。 ここまでにいく前に次のような処理をしましたのでソースを載せます。 Private Sub CommandButton1_Click() Dim wStr As String Dim wDate As String Dim wDate2 As String Dim Exitflg As Boolean Dim i As Integer Dim wVal As Variant Dim wSh1 As Worksheet Dim wSh2 As Worksheet Dim iStartRow As Long Dim iEndRow As Long Dim wDay As Long Set wSh1 = Workbooks("入力フォーム.xls").Worksheets("日付セット") If wSh1.Range("C6") = "" Then '値が入っているか MsgBox "日付を入力してください!" Exit Sub End If wDate = Replace(wSh1.Cells(6, "C"), "西暦", "") wDate = Format(wSh1.Cells(6, "C"), "yyyy/mm/dd") If Date < wDate Then MsgBox "未来の日付入力はできません!" Exit Sub End If If DateAdd("yyyy", -1, Date) > wDate Then MsgBox "日付を今日から1年以内で設定してください!" Exit Sub End If わかりづらいかもしれませんがよろしくお願いします。

  • エクセル vbaでの相談です

    エクセルでの質問です。 販売管理表を作りたいと思います。 sheet1を商品マスター表とし、下記の見出しがあって A1 JANコード(上一桁4からの番号で13桁) B1 商品コード (14桁) C1 商品名 D1 価格 以下A2行以降、A1行の見出しを元に商品詳細があるとします。 sheet2の下記のA1行を見出しとし、A2行から販売実績をユーザーフォームを使って入力していきたいと思います。 A1 JANコード B1 商品コード C1 商品名 D1 価格 E1 販売番号 フォームを作成し、入力窓に JAN、商品コードのいずれかを入力すると、他の入力窓にsheet1の商品マスター表から該当する商品名、価格を自動入力し登録ボタンを押すと、sheet2の該当セルに反映されるということはできますでしょうか? そして異なる商品のまとめ買いの件数も知りたいので、フォーム上で複数アイテム登録できるようにし、販売番号で件数を管理したいのですが、そちらも可能でしょうか? 販売番号も自動で通し番号が入るようにしたいです。わかりにくい文章で申し訳ありません。ご教授の程、よろしくお願い致します。

  • 「JANコード」と「日付」で販売個数表を作成したい

    エクセルで販売個数表を作成していますが、うまくいかず困っています。 Sheet1のA列に現在在庫している全ての商品のJANコード、B1~AF1にある月の1日から31日までの日付が日付データとして入っています。別ブックのSheet1にA列(販売日)、B列(JANコード)、C列(販売個数)のデータがあり、この販売個数を前述の個数表にJANコードと日付を対応させて入力したいのです。(例えばMというJANコードの品物が14日に2個売れたとしたら、MというJANコードの行の14日の列のセルに2と入れたいということです。)尚、別ブックの販売個数のデータは各商品ごとに1日の総売り上げ個数が出ているため、合算をする必要はなく、C列の数字をそのまま該当するセルに直接入れることができればOKです。 できることならマクロを使って、「別ブックを参照してデータを読み込み、販売個数表に個数を反映」させたいのですが、どのように作ったらよいのか具体的に教えていただけないでしょうか?関数を使って入力する方法もあれば是非、お願いします。

  • VBAで表作成

    こんにちわ VBAを使い表を作っているのですが、入力フォームで日付を入力しコマンドボタンを押すと別ブックになり、予め用意してある表に入力した日付から1ヶ月の日付が貼り付けるというのをやっています。 マクロを記録し試してみたところ構文エラーが出てしまいました。 日付を貼り付けるところまでできたのですが・・・ 表には線がすでに入っています。 入力された最後の日付のところで太線で表を閉めたいのですができますでしょうか。 構文エラーになったソースを貼り付けます。 Range((4,"i"+12):(10,"i"+12)).Select Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .Weight = xlHairline .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With よろしくお願いします