• ベストアンサー

エクセルvbaについて

いまある表を作成して降ります。 その表を別シートに作成したセルに必要な部分のみ転記したいと思っておあります。 表1 No 日付 顧客名 請求金額 立替金 非課税 課税 1  01  A社   2010  1500   300   210 2  04  B社   5100  2000  1000  2100 3 05 C社   10200 6000 0 4200 ↓ 別表   No 1 2010 A社  請求金額  01 1 1500  A社  立替金   01 1 300 A社  課税    01 1 210 A社  非課税   01 2 5100 B社   ↓    02 2 2000 B社        02 2 1000 B社        02 2 2100 B社        02 3 10200 C社        ↓ 3 6000 C社  3 0 C社 3 4200 C社 と必ず4項目なのですが、最終的に0円の行を削除して完成になります。 上記の表ですと 3番に0円がありますので最終的に削除します。 顧客名も4項目づつ入ります。 この作業を一連のマクロにて実施したいのですが、可能でしょうか? よろしくおねがいいたします。

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

  • ベストアンサー
  • big_fool
  • ベストアンサー率22% (43/193)
回答No.4

Sub TEST() Dim A As Long Dim B As Long Dim C As Long Dim D As Long Dim E As Long Dim F As Long '表の行数を調べる A = Worksheets("sheet1").Range("A1").CurrentRegion.Rows.Count - 1 For C = 0 To A For B = 4 To 7 'Sheet1のデータをSheet2に複写する Worksheets("Sheet2").Cells(B - 3 + D, 1) = Worksheets("Sheet1").Cells(C + 1, 1) Worksheets("Sheet2").Cells(B - 3 + D, 2) = Worksheets("Sheet1").Cells(C + 1, B) Worksheets("Sheet2").Cells(B - 3 + D, 3) = Worksheets("Sheet1").Cells(C + 1, 3) Worksheets("Sheet2").Cells(B - 3 + D, 4) = Worksheets("Sheet1").Cells(1, B) Worksheets("Sheet2").Cells(B - 3 + D, 5) = Worksheets("Sheet1").Cells(C + 1, 2) Next D = C * 4 Next 'Sheet2の表の行数を調べる Sheets("Sheet2").Select E = Worksheets("sheet2").Range("A1").CurrentRegion.Rows.Count '非課税欄の確認 For F = 1 To E If Worksheets("Sheet2").Cells(F, 2) = 0 Then '0の場合は行を削除する Cells(F, 1).EntireRow.Delete End If Next End Sub 単純にこのように考えて見ましたあまりよい見本とはいえませんね 削除のループは一緒に出来なかったので最後に書いて見ましたあまり時間がなかったのでこんなもんで失礼します

a32
質問者

お礼

ありがとうございました。何とかなりそうですが、不明な点がいくつかあります。

a32
質問者

補足

ありがとうございます。教えてください。 いま勉強しながらやっていますが、いまいちわかりません。 For C = 0 To A For B = 4 To 7 'Sheet1のデータをSheet2に複写する Worksheets("Sheet2").Cells(B - 3 + D, 1) = Worksheets("Sheet1").Cells(C + 1, 1) Worksheets("Sheet2").Cells(B - 3 + D, 2) = Worksheets("Sheet1").Cells(C + 1, B) Worksheets("Sheet2").Cells(B - 3 + D, 3) = Worksheets("Sheet1").Cells(C + 1, 3) Worksheets("Sheet2").Cells(B - 3 + D, 4) = Worksheets("Sheet1").Cells(1, B) Worksheets("Sheet2").Cells(B - 3 + D, 5) = Worksheets("Sheet1").Cells(C + 1, 2) Next D = C * 4 Next でシート1の2行目から転写開始しますが、シート2 のセル(1,1)からになるのかが不明です。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (5)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.6

この問題は、直線的な繰り返しの問題で、何もむつかしくないですよ。 表Aの最終行を知る。Dとする。 (*)表Aについて 表Aのある行(i)に付き その行はDに等しいか。等しければ終り。 請求金額0円なら次のブロックへ 表BのJ行のA列=請求金額(C列) 表BのJ行のB列=社名(B列) 表BのJ行のC列=請求金額と言う文字列 表BのJ行のD列=日付け(A列) 立替金額0円なら次のブロックへ J=J+1 表BのJ行のA列=立替金額(D) 表BのJ行のB列=社名(B列) 表BのJ行のC列=立替金と言う文字列 表BのJ行のD列=日付け(A列) 課税金額0円なら次のブロックへ J=J+1 表BのJ行のA列=課税額(D) 表BのJ行のB列=社名(B列) 表BのJ行のC列=課税と言う文字列 表BのJ行のD列=日付け(A列) 非課税金額0円なら次のブロックへ J=J+1 表BのJ行のA列=非課税額(D) 表BのJ行のB列=社名(B列) 表BのJ行のC列=非課税と言う文字列 表BのJ行のD列=日付け(A列) i=i+1 繰り返し(*)へ 右辺はすべてA表のセル。 あと道具立ては ・A,B表の表現のし方 ・セルはSH1.Cells(i,"A")のように表す。 ・最下行はCurrentRegionかSh1.Range("A65536").End(xlUP)などで知る。 行をDeleteするより、書かないほうが良いと思う。

全文を見る
すると、全ての回答が全文表示されます。
  • big_fool
  • ベストアンサー率22% (43/193)
回答No.5

2回も投稿してしまいすみません

全文を見る
すると、全ての回答が全文表示されます。
  • big_fool
  • ベストアンサー率22% (43/193)
回答No.3

Sub TEST() Dim A As Long Dim B As Long Dim C As Long Dim D As Long Dim E As Long Dim F As Long '表の行数を調べる A = Worksheets("sheet1").Range("A1").CurrentRegion.Rows.Count - 1 For C = 0 To A For B = 4 To 7 'Sheet1のデータをSheet2に複写する Worksheets("Sheet2").Cells(B - 3 + D, 1) = Worksheets("Sheet1").Cells(C + 1, 1) Worksheets("Sheet2").Cells(B - 3 + D, 2) = Worksheets("Sheet1").Cells(C + 1, B) Worksheets("Sheet2").Cells(B - 3 + D, 3) = Worksheets("Sheet1").Cells(C + 1, 3) Worksheets("Sheet2").Cells(B - 3 + D, 4) = Worksheets("Sheet1").Cells(1, B) Worksheets("Sheet2").Cells(B - 3 + D, 5) = Worksheets("Sheet1").Cells(C + 1, 2) Next D = C * 4 Next 'Sheet2の表の行数を調べる Sheets("Sheet2").Select E = Worksheets("sheet2").Range("A1").CurrentRegion.Rows.Count '非課税欄の確認 For F = 1 To E If Worksheets("Sheet2").Cells(F, 2) = 0 Then '0の場合は行を削除する Cells(F, 1).EntireRow.Delete End If Next End Sub 単純にこのように考えて見ましたあまりよい見本とはいえませんね 削除のループは一緒に出来なかったので最後に書いて見ました

全文を見る
すると、全ての回答が全文表示されます。
  • taocat
  • ベストアンサー率61% (191/310)
回答No.2

なかなか回答がつかないですねぇ。 で、簡単なサンプルをひとつ。 Sheet1:表 Sheet2:別表 表、別表も1行目は見出しとする。 Sub test() Dim R1 As Long Dim R2 As Long Dim C1 As Integer Dim Sht2 As Worksheet Set Sht2 = Worksheets("Sheet2") R2 = 1 With Worksheets("Sheet1") For R1 = 2 To .Range("A65536").End(xlUp).Row For C1 = 4 To 7 If .Cells(R1, C1) <> 0 Then R2 = R2 + 1 Sht2.Range("A" & R2) = .Cells(R1, 1) Sht2.Range("B" & R2) = .Cells(R1, C1) Sht2.Range("C" & R2) = .Cells(R1, 3) Sht2.Range("D" & R2) = .Cells(1, C1) End If Next C1 Next R1 End With End Sub   実際は最初に別表の結果を削除するとか、別表の見出しをセットするとかのコードがいりますが、詳しいことがわからないし、サンプルということで省いてありますので、テストを繰り返す場合は、別表結果を削除してから実行してくだされ。 それから、値0の項目は別表が出来てからではなくて、最初から省いてありまする。 以上。

全文を見る
すると、全ての回答が全文表示されます。
noname#8185
noname#8185
回答No.1

if文で書かなくすればよいのでは

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • EXCELで出来るでしょうか?

    はじめまして。EXCELについて教えて下さい。 例えば  No 顧客 注文No 種類  1    A    1    ○  2    C    5    ○  3    B    3    ○  4    A    1    □  5    B    4    ○  6    C    5    ○  7    B    3    △  8    B    4    □  9    C    6    △ といった表で、顧客をキーに【顧客Aの注文No1の○の個数は?】 といったCOUNTが出来るでしょうか?顧客は事前には分かりません。 最終的には下の様な表になればと考えています。  A  ○  △  □  計  1   1         1  2   1         1  B  ○  △  □  計  3   1   1      2  4   1      1   2  C  ○  △  □  計  5   2         2  6       1     1 データは2000件程度です。 よろしくお願いします。    

  • エクセルの統合について

    エクセルでのデータの統合について教えてください。 表1と表2のデータを統合したものを表3として作成したいのですが、うまく出来ません。  表はこのような感じです。  表1     A     B     C     1  顧客名  住所   TEL     2   あ社     3   い社  表2     A     B        1  顧客名  機種     2   い社     3   え社 共通の項目は、A列の顧客名だけです。 これを下記のようにしたいのですが・・・  表3     A    B    C    D     1  顧客名  住所  TEL  機種     2   あ社     3   い社     4   え社 統合の機能では無理なのでしょうか? ほかにいい方法があれば、教えてください。 よろしくお願いします。

  • エクセル 表の形態を効率よく変更したい

    以下の見積の表があります。   A   B   C   D 1 大項目 小項目 金額 シートNO' 2  あ    a   2000    1 3  あ    b   3000    2 4  い    a   1000    3 5  い    b   3000    4 6  い    c   2000    5 ・  ・    ・    ・   ・ ・  ・    ・    ・   ・ これを。   A  B   C   D 1  あ            2    a   2000   1 3    b   3000   2 4  い            5    a   1000   3 6    b   3000   4 7    c   2000   5 ・・・とした表を別に作成したいのです。 一つの大項目に対して、小項目は最大4つほどあります。 大項目については、40近くあります。 今後これを元に利用したいので。 項目の数、内容、金額は随時変わる予定です。 そして、前者の表は、各シートから其々データを参照してきています。 関数などを利用し、効率よく変更できないでしょうか。 よろしくお願いします。

  • ExcelのVBAで繰り返し作業。

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=280060 と質問をし、回答をいただき、完成したと思っていたら、追加注文がつきました。 (項目名などが変わっている場合があります。) まず、一覧表が以下のようになっていたとします。 No | 品番 |  1  | 11111| 2  | 22222| 3  | 33333| そして、利用者に、インプットボックスを利用して、 ・No(一覧表中の「No」) ・枚数 ・No2 ・全体数 と入力してもらいます。 結果として No | 品番 | No2 2 | 2222 | 1212 というような表を3枚作成します。 たとえば、 ・No : 2 ・枚数 : 4 ・No2 : 1212 ・全体数 : 3 と入力してもらったら、 結果は、 No | 品番 |No2 2 | 2222 |1212A No | 品番 |No2 2 | 2222 |1212A No | 品番 |No2 2 | 2222 |1212A というのを4回(枚数文)繰り返し、それが終わったら No | 品番 |No2 2 | 2222 |1212B というようにNo2のアルファベットを3回(全体数分・今回はCまで)変えて、 上記の作業を繰り返す、というようにしたいのです。 おわかりいただけないかもしれませんが、宜しくお願いします。

  • エクセルVBAについて

    はじめてのVBAで本を読んでも使い方がわからないので教えてほしいのですが シート1にこのような表を作成して   A    B    1山田   500 2伊藤 20000 3佐藤    50 ・ ・ ・ シート2に    A   B    C 1    請求書 2 3 山田 4 500円 というような請求書を印刷していくVBAを作りたいのですが人数については10人から300人とその時々で変化するのでデータがないときは 印刷もそこで終わりという風にしたいのですが、、、 よろしくお願いします。 エクセル2003 XPです。

  • エクセルで2つのファイルでの作業で質問です。

    エクセルで2つのファイルでの作業で質問です。 明細一覧表の 請求書NOの列  同じ請求書NOの行が複数あり 同じ請求書NOの行をひろって、同じ請求書NOの行の金額(列)の合計を、もう1つのファイルの請求書NOの列に、明細一覧表でひろった、それぞれの請求書NOの合計金額を、もう1つのファイルの同じ請求書NOのところに、合計金額を入れる作業をしたいのです。なにか、関数で、効率よくできる方法はないものか、ご教示していただきたく、宜しくお願いいたします 金額 請求書NO 200 9825A 500 9825A 300 9825A 900 9811B 2000 9854S 800 9854S ↓もう1つのファイル 請求書NO 金額 9825A       1000 9811B     900 9854S    2800

  • ワードにて不要な部分の行削除の方法について

    こんばんは。 皆様に助けられながら、お陰様で仕事がスムーズに運んでおり、ありがとうございます。 現在、ワード2007を利用して、作成している書類があります。 その書類は、1ファイルに約90ページ(差し込み印刷利用)が入っています。 ファイルの内容は請求書でして、タイトル行と最終行の集計も入れ、行8×列4の表が差し込まれています。 1行目のタイトルは左から、NO、内訳、金額、備考で、2行目から番号を「1」とし、内訳・金額が入力されています。 最終行は合計金額を計算できるように、計算式を入れています。 内訳内容は、A社は2行使い、B社は4行使い、C社は1行使いと、まちまちになっており、それらが90ページとなっています。 こちらとしましては、A社であれば不要の4行、B社の2行、C社の5行とブランクになっている行を削除したいと考えています。 1ページずつ手作業で行を削除するのはできるのですが、一括で削除できるような方法というのはあるのでしょうか? ご経験者様やご存知の方がいらっしゃいましたら、ご教授下さいますとありがたいです。 どんな方法でもかまいませんので、ヒントを下さいますと助かります。 どうぞよろしくお願いします。

  • エクセルの表から、当てはまるデータを抽出する方法

    皆様の過去の質問を見たのですが、勉強不足で分からなかったため、 質問させていただきます。 以下のような表があるとします。   A     B      C       D 1             A社      B社 2(項目)(詳細項目) (内容) 3 書類  見積書  金額に注意! 日付は書かなくて良い   4     注文書           承認印をいただく 5     請求書    必要 6 納品         3日後    1週間後   7 商品         ノート    パソコン  やりたいこととしては、別シートに各社の知りたい項目の内容が抽出されるというものです。 例えば、“A社”の「見積書」に関する内容が知りたい、というときに、別シートにA社と記入またはプルダウンから選択し、同じく項目である見積書を選択すると、「金額に注意!」という内容が抽出される という感じです。 ↓ A社  見積書  金額に注意! VLOOKUPだと、表の中の左端の項目でないと探せないということだったので、上記のような表だとダメなのかと思いました。(詳細項目の内容で検索したいので…) また、A社もB社も項目としてはすべて同じものが並んでいますが、抽出する際は1社ずつ出したいです。 エクセル初心者で、ネットや参考書を見ながらの手探り状態です。 こんな私にも分かるよう、ご指導いただければ幸いです。 よろしくお願い致します。       

  • 売上データに会社毎に請求番号を振る(access

    顧客の売上データ(テーブル)があるのですが、 同じ顧客名で、複数のレコードがあります。 売上を1ヶ月毎に、顧客毎に利用分をまとめて請求書を 作成しています。 下記のように、10月分には、すでに請求書番号(連番)が 入っています。 11月分の売上データの空欄の請求番号のところに、 顧客毎に、自動的に連番(2523~)で請求番号を振る方法がありましたら、 教えてください。どうぞよろしくお願いいたします。 (売上テーブル) 売上日   顧客名 金額  請求書番号 12/10/08 C社  \2000  2511 12/10/09  C社  \5000  2511 12/10/10  C社  \3000  2511 12/10/01  D社  \1000  2522 12/11/01  A社  \2000 12/11/06  A社  \1000 12/11/01  B社  \1000 12/11/08  C社  \2000

  • エクセルVBA 列の削除 

    VBA初心者です。過去の質問やネットで捜してみましたがわかりません。 A社 B社 C社 D大学 F大学 G社・・・・ 2人 1人 0人  4人  2人 1人・・・・ 5人 2人 1人  2人  1人 1人・・・・ ・・・・ のように、1行目から項目名が入っている表がある時、項目名に「~大学」とはいっている列を列ごと削除するにはどうしたらいいでしょうか。 質問の意味がわかりにくくてすいません。おわかりになる方教えてください。よろしくお願いします。

このQ&Aのポイント
  • ソーラーパネルで商品を充電する方法とは?
  • さまざまな商品がソーラーパネルで充電可能か検証
  • 商品によっては追加の部品が必要な場合もあります
回答を見る

専門家に質問してみよう