• 締切済み

VBAについて教えてください。

下記の手順でVBAを組みたいのですが どのようにすればよいかご教示いただけないでしょうか。 手順 (1)【A様sheet】>E9に入っている数字を<請求書sheet>E11にコピペ。 (2)【A様sheet】>J9に入っている数字を<請求書sheet>E12にコピペ。 (3)【A様sheet】>E3に入っている数字を<請求書sheet>E13にコピペ。 (4)<請求書sheet>E13に―100。  (5)【A様sheet】>A1に入っている文字列を<請求書sheet>C11以下にコピペ。 ※(2)が〈0〉だった場合には何も入力せず、(3)に進む。 ※(4)-100は固定数値です。 ※(5)は数字が入った分だけ繰り返します。 完成系は添付の画像のような結果です。 毎月数100件の処理が発生するためVBAで行いたいと思っています。 どうぞよろしくお願いいたします。

みんなの回答

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

請求書の発行をやりたいのか?A様と言っている、ところを見ると、B様、C様・・分も多数取引先分を作るのだろう。請求書作成は、普通はそうだ。そういうことを質問に書いてない。 また、各1枚のシートにA様、B様、C様分・・を作るのでなく、A様分をシートで作成ーー>印刷、データクリアー同じ場所に、B様分を作成ー>印刷・・を繰り返す、を行うのが普通ではないか。 こういう処理ロジックのことを、システム業者か、自社にあれば、システム部の経験者に聞いてみることがまず大切で、VBAコード云々を言う前のレベルではないのか? ーーー また原データだが、 Bは、質問の画像のシートの上のイメージ、Cは質問の画像のシートの下のイメージとして、Aー>A'ー>B、Aー>A'’ー>Cといったデータの作成になるのが普通と思うが、Aに当たるシートはないのか。A’は必要なデータだけ取り揃えたり、並び順が、処理に適したデータシートを作るなどのことを説明している。 多分Bは、原データを編集して、ある目的のためにレイアウトされているシートデータ(2次データとでも、言おうか)で、こういう表を基に、他の目的の書類(第3次データとか最終目的データと言おうか)を作るなど、ふつう考えないはず。質問者は、質問ぶりから、業務のコンピュター経験が少ないようなので、システム経験のある人に、よく相談してから、指導を受けて、考えるべきと思う。 我流な思い付いたやり方に、即取り掛かろうとするためで、処理を複雑にしていて、質問の説明も、応用の効かない、長々記述になっていると感じた。 普通の回答者は、質問者の路線に忠実に回答する人ばかりだが、私は質問者の発想そのものに疑問を感じ、コンピュター利用を、一片の質問で解決できると、軽く考えるなと言いたい。

  • SI299792
  • ベストアンサー率48% (715/1481)
回答No.4

いくつか勝手な解釈をさせていただきました。 A様、B様、C様…とデータシートが沢山あり、下に追加して行く。 原則として3行、但しJ9が0なら2行になる。(E9、E3が0は考慮していない) データシートと請求書シート以外存在しない。 請求書シートは右端にある。 ' Option Explicit ' Sub Macro1() '   Dim Row As Long   Dim Sheet As Integer '   Sheets("請求書").Select   [C11:C148576,E11:E148576].ClearContents   Row = 11 '   For Sheet = 1 To Worksheets.Count - 1     Cells(Row, "C") = Sheets(Sheet).[A1]     Cells(Row, "E") = Sheets(Sheet).[E9]     If Sheets(Sheet).[J9] > 0 Then       Row = Row + 1       Cells(Row, "E") = Sheets(Sheet).[J9]     End If     Cells(Row + 1, "E") = Sheets(Sheet).[E3] - 1     Row = Row + 2   Next Sheet End Sub 請求書シートが左端にある場合の変更点   For Sheet = 2 To Worksheets.Count (4)<請求書sheet>E13に―100。 E13 に-100すると、 -87になります。図を信じ、勝手に-1と解釈しました。 D・F列にも数字が入っていますが、説明がないので入れていません。

  • kkkkkm
  • ベストアンサー率65% (1622/2462)
回答No.3

手順をなぞると (1)【A様sheet】>E9に入っている数字を<請求書sheet>E11にコピペ。 i=11 Sheets("請求書sheet").Cells(i,"E").Value=Sheets("A様sheet").Range("E9").Value i=i+1 Sheets("請求書sheet").Cells(i,"C").Value=Sheets("A様sheet").Range("A1").Value (2)【A様sheet】>J9に入っている数字を<請求書sheet>E12にコピペ。 ※(2)が〈0〉だった場合には何も入力せず、(3)に進む。 If Sheets("A様sheet").Range("J9").Value<>0 Then Sheets("請求書sheet").Cells(i,"E").Value=Sheets("A様sheet").Range("J9").Value Sheets("請求書sheet").Cells(i,"C").Value=Sheets("A様sheet").Range("A1").Value i=i+1 Endif (3)【A様sheet】>E3に入っている数字を<請求書sheet>E13にコピペ。 Sheets("請求書sheet").Range(i,"E").Value=Sheets("A様sheet").Range("E3").Value Sheets("請求書sheet").Cells(i,"C").Value=Sheets("A様sheet").Range("A1").Value (4)<請求書sheet>E13に―100。(←多分D13でしょう) Sheets("A様sheet").Cells(i,"D").Value=-100   (5)【A様sheet】>A1に入っている文字列を<請求書sheet>C11以下にコピペ。 各操作の時に実施済み。 D列についても-100以外手順にないので割愛。 Sheets("請求書sheet").Cells(i,"D").Value=Sheets("A様sheet").Range("E8").Value Sheets("請求書sheet").Cells(i,"D").Value=Sheets("A様sheet").Range("J8").Value をそれぞれ追加すればいい思いますが。 Bなど出てきますがどこにあるのか不明なので割愛 上記実行していないのでタイプミス等あればご勘弁です。

回答No.2

EXCELには、マクロの記録という機能があるので、その機能を利用し質問の内容を実行してみましょう。そこでどのようなコードが記述されているか確認し 命令を一つずつ調べましょう。それでも、理解できない場合は、同じように あらゆることをマクロの記録機能を利用し研究しましょう。まずはそこからです。 質問のまる投げは良くないです。 まるで努力が見られません。

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.1

補足願います >※(5)は数字が入った分だけ繰り返します。 どこの数字の事を言っていますか? 請求書sheetのA列?D列?

関連するQ&A

  • エクセルVBA/抽出・貼付け

    下記を行いたいのですが、どのようなコードになるのでしょうか? シート001(入力用) (1)A1~A50、B1~B50、C1~C50、D1~D50  に数値、E1~E50に文字列 (2)F1~F50、G1~G50、H1~H50、I1~I50  に数値、J1~J50に文字列 ※空白行混在 シート002(計算用) シート001に作ったコマンドボタン:クリックにより、 シート002を表示させ、A1~E100に、 シート(1)のA1~E50とF1~J50の空白行以外を連続して 反映させたい。並べ替え用など別シートを用いずに、 VBAコード内で処理したい。

  • Val関数をVBAで使うには?

    助けてください VBA初心者です Excel VBAでA列の4からj行目までの文字列(例:"12345678” 8桁固定)、k行目までの数字以外の文字列(例:AB12345678 9桁以上ある)のうち、j行目までの文字列をVal関数で数値に変換したいのですが、どうやっていいのか分かりません j+1行目からk行目までは数字以外の文字列が入っています 1セルだけの変換はできます(例:A4セルに"12345678”がある場合、Val(range("A4"))で12345678が出ます) ※仮にj=98と固定しました Sub Value_num() J = 98 'A列を値→数字に変換 Columns("A").Select 'Range("A4").Value = val(Range("A4")) これは動く Range(Cells(4, 1), Cells(J , 1)).Value = val(Range(Cells(4, 1), Cells(J, 1))) 'これが動かない End Sub

  • 指定した数だけデータをコピペする方法

    VBAの参考例を教えてください。 <シート1> A列に1から順に数字が入力されており、B列からE列まで数値のデータが入力されています。F列にはB列からE列にデータが入力されているセルの数をカウントした関数が入力されています。 <シート2> シート1のB~Eに入力されたデータが縦に入れ替えの上A列にコピぺされています。 ここで、シート1のA列の数値をコピーし、シート1F列に示されたデータ数分だけ、シート2のF列に縦に順々にペーストしていく方法をご教示ください。シート1のA列に入力された数値が最後の行にくるまでこれを繰り返します。 シート1 A B C D E F 1  a b c d 4 2  e d f   3 3  d e     2 ・ ・ ・ シート2 A B C D E F a         1 b         1 c         1 d         1 e         2 d         2 f          2 d         3 e         3 当方、VBAは全くの初心者です。急遽仕事で必要になってしまい、質問しました。 どうぞよろしくお願いします。

  • VBA

    エクセルVBAについて教えてください。 シート1 A列   B列   C列   D列   E列    F列 ・・・            商品A  商品B  商品C  商品D・・・ 日付  名前(1)   3           2     1 日付  名前(2)         1     3  ・     ・     ・     ・     ・    ・  ・     ・     ・     ・     ・    ・  ・     ・     ・     ・     ・    ・ シート2 A列   B列    C列    D列    E列 日付  名前(1)   商品A   3               商品C    2               商品D    1 日付  名前(2)   商品B    1               商品C    3 ・      ・      ・      ・  ・      ・      ・      ・ ・      ・      ・      ・      上記のような、エクセルで作ったシート1があります。 これを、シート2のようにコピーしたいと思っています。 商品は20列あり、数字が入っている列と入っていない列があります。 数字が入っている列の商品と数字をコピーして、すべてコピーが 終わったら次の行のコピーしていく。 行は100ほどあります。 よろしくお願いします。

  • エクセルVBA

    A1からE20までの範囲に数字が表示されています。 そしてその表の行ごとの数値の合計をG列に算出して表示させたいのですが どのようにすれば良いのでしょうか。 VBA初心者なので、分かりやすく教えていただけると助かります。 よろしくお願いいたします。

  • Excel VBA Find関数の使い方

    下記のようなマクロを作りたいと思います。 <シート名:元データ> B列(商品番号)がA列(ファイル名)に含まれていれば、 A列のファイル名をC列(チェック)に転記するものです。 <シート名:完成形> やりたいことの完成形がこちらのシートです。 詳しいデータは画像データを添付しました。 Findを使用するところまでは調べたのですが、VBA初心者のため シンプルな方法があれば教えてください。

  • EXCELのデータベース利用について(VBA)

    VBA初心者の者です。 下記の様なEXCELファイルを作りたいのですが、どのようにすれば良いのか まったくわかりません。 ACCESSでの構築が簡単なのかもしれませんが、データ量がそれほど多くないことと 職場にACCESSがないため、可能であればEXCELで構築したいと考えています。 私自身、プログラムの知識がなく、EXCEL VBAのサイトを確認するのですが、いまいち どうすれば良いのかわかりません。 ぜひご教授の程よろしくお願いします。 3つのシートの構成は以下になります。 【入力シート】 A1セルに文字列(A~Z)入力欄 【○○データシート】 A列に A~Z の文字列 B列に 001~100までの数値 C列に 001~100までの数値 D列に 001~100までの数値 E列に 001~100までの数値 例)    A列   B列   C列   D列   E列 1   A   001 2   B   001    002    003   004 3   C   003 4   D   002    003 【▽コマンドシート】 A列に 001~100までの一意の数字 B列に 文字列(コマンド) C列に 文字列(コマンド詳細) 例)    A列    B列    C列 1   001   xx     blank 2   002   xxx△   xxx 3   003   xxxx    x○ 4   004   xxxxx   xxx 【欲しいVBA】 1、入力シートのA1セルに○○データシートのA列に該当するA~Zの 文字列を入力。 2、○○データシートのB列~F列までの数値を参照 3、2の数値において▽コマンドシートのA列に記載ある番号と紐づけを行い、 ▽コマンドシートのB列、C列に記載がある文字列を入力シートのB列、C列にコピー ※コピー時は▽コマンドシートの書式や体裁情報も含めてコピー。 例としては以下になります。 入力シートの A1セルにDを入力した場合は 入力シート    A列    B列    C列 1   D    xxx△  xxx 2        xxxx    x○ 3 以上、ご教授よろしくお願いします。

  • EXCEL2010 VBA 繰り返し処理

    EXCEL2010でVBAを使用してシートを作成しています。 シート1のA1にヘッダ数・A2に項目数を入力します。 VBAのコードを実行するとA1のヘッダ数が1ならシート2のA列には何も表示せず A2の項目数の分だけB列の14行目から数字を入力していきます。 (例)シート1   A1:1   A2:20  の場合はシート2のB14から20行下まで1~20の値を自動入力させる。   シート2   B14:1   B15:2     ↓   B33:20 シート1のA1が2以上の場合はシート2のA14から、シート1のA2の数値分アルファベットを表示させていきます。 (例)シート1   A1:2   A2:10  の場合シート2のA14:A23に「A」を表示させます。(シート1のA2の数分この場合は10行ずつ)               A24:A33に「B」を表示させます。               B列にはアルファベットごとに数字を1~表示させます。   B14:B23 1~10   B24:B33  1~10 シート1のA1が2なのでA・Bを表示 A1が3だとA・B・C A1が10だとA・B・C・D・E・F・G・H・I・JがA2の数字で区切りながら表示される。 このようなコードを書きたいのですが、どなたかご教示お願いします。

  • 【Excel VBA】シート間で重複していない値を知りたい

    こんにちは。Excel VBAについてのご質問です。 「シートA」と「SheetB」があるのですが(同ブックです)、 ・「SheetB」のE列の数値と「シートA」のC列の数値を見比べて  「シートA」のC列にない数値があった場合、  「SheetB」のその数値を含む行を赤色に変換する。 ・上記の作業が終了したら「完了」というメッセージボックスを出す。 というマクロを組みたいのですがうまくいきません。 お分かりになる方がいらっしゃいましたら、ぜひお教え下さい。 宜しくお願い致します。

  • excel vba 検索の方法について

    excel vba 検索の方法について sheet1とsheet2があり sheet1のA列に10列(全て8桁の数字)文字が並んでいます。 sheet2のA列には1000列(全て8桁の数字)文字が並んでいます。 sheet1のA列とsheet2のA列で同じ文字がある場合 sheet2のA列の同じ文字の隣のsheet2のB列に◎がつくような vbaが書きたいです。 A列の文字は消したり、文字を変えたりします。 コマンドボタンに書いて、ボタンを押せば B列に◎がつくようにしたいです。 ご教授お願いします。