前回質問詳細
https://oshiete.goo.ne.jp/mypage/history/question/

解決で出来て、感激のあまり…早とちりして、締め切ってしまいました<m(__)m>
大変失礼して、申し訳ございませんでした。

ループの使い方をご教授お願いします。
Sub 請求書作成()

Worksheets("請求書").Range("a2").Value = Worksheets("管理表").Range("c4").Value
Worksheets("請求書").Range("a3").Value = Worksheets("管理表").Range("d4").Value
Worksheets("請求書").Range("b4").Value = Worksheets("管理表").Range("b4").Value
Worksheets("請求書").Range("c14").Value = Worksheets("管理表").Range("a4").Value
Worksheets("請求書").Range("c17").Value = Worksheets("管理表").Range("g4").Value
Worksheets("請求書").Range("b18").Value = Worksheets("管理表").Range("h4").Value
Worksheets("請求書").Range("b20").Value = Worksheets("管理表").Range("m4").Value
Worksheets("請求書").Range("d16").Value = Worksheets("管理表").Range("o4").Value
Worksheets("請求書").Range("b16").Value = Worksheets("管理表").Range("n4").Value

ループという技を是非取り入れてみたいです。

ご教授お願いします。

質問者からの補足コメント

  • 添付の写真が管理表のシートです。
    A列番号は順番にはなっていません。(管理番号みたいなものです。)
    A列は50行まで表があります。

    お手数ですが、前回の質問の時のコードに上書き記載お願いしてもよろしいでしょうか?

    「続き…エクセルvba ①SUBメニューを」の補足画像1
    No.2の回答に寄せられた補足コメントです。 補足日時:2017/06/15 23:35
  • お世話になります。
    改めて考え方を変えてみました。
    「管理表」のn2に検索値を設けたかったので、If Target.Address = "$n$2" Then
    に入れ替えてみました。
    そうすると、請求開始日を変更するコードの  Range("n5").Formula = WorksheetFunction.EDate(Range("n5"), Range("g5"))
    がn5はちゃんと起動しますが、n6以降が動かないです。

    管理表の画像を添付します。
    ご教授お願いします。

    ★「請求書」にvlookをいれてみました。
    これで請求書に転記出来ました。
    プリントアウトのコードを入れました。

    「続き…エクセルvba ①SUBメニューを」の補足画像2
    No.4の回答に寄せられた補足コメントです。 補足日時:2017/06/17 15:22
  • ごめんなさい(慌慌)
    請求書に書いたvlookを消しました(汗)
    動作確認してみました。
    管理表のシートから請求書シートに転記されないです。
    私の上書きミスだと思うのですが。
    ご教授お願いします。
    請求書のシート添付します。

    管理表のn2で請求書に転記するって自己流で上書きしみました。文字オーバーで一部抜粋です。
    コード変更箇所です。
    Address = "$n$2" Then

    請求書と管理表の文字を入れ替えました。Worksheets("管理表")の部分3か所です。

    「続き…エクセルvba ①SUBメニューを」の補足画像3
    No.12の回答に寄せられた補足コメントです。 補足日時:2017/06/17 16:19
  • 大変心強いです。ありがとうございます。

    請求書シートのc16に=管理表!N2と入れたら成立出来ました。
    これで大丈夫でしょうか?

    >イミディエイトウィンドウに
    ? Target.Address
    と打って何が表示されたか教えてください。

    >地道な作業ですけど、これをちゃんと出来ないで
    理解はほぼ不可能といってもいいと思います。

    一行づつ辿っていって、コードの動作を把握したいと思っているんですが、うまくできません。
    画像を添付します。

    ご教授お願いします。

    「続き…エクセルvba ①SUBメニューを」の補足画像4
    No.22の回答に寄せられた補足コメントです。 補足日時:2017/06/18 16:30
  • ステータスが無いと表示されたので、あれこれ調べていました。
    ごめんなさい(汗)出来たと思っていたのは、消したとばかり思っていたvlook関数が入っていました(/o\)
    vlookを消して請求書シートに頂いたコードを入れて、請求書の番号”c16”に管理番号を入れても無反応でしたので、
    ステップ実行しました。
    画像を添付します。
    管理表と請求書は補足で送った通りのモノで変わりはないです。

    私が無知過ぎて、yokomayaさんの大切な時間を割いていただいてるのが、心苦しくって。
    VLOOKUP関数を使って、管理表のn2に検索値を設けて、請求書に内容を添付させることにします。

    以前回答頂いた、
    Range("n5").Formula = WorksheetFunction.EDate(Range("n5"), Range("g5"))
    でn6以降50列分同じ操作出来るコードはありますか?

    「続き…エクセルvba ①SUBメニューを」の補足画像5
    No.23の回答に寄せられた補足コメントです。 補足日時:2017/06/18 21:10
  • 諦めなくっていいんですか…ありがとうございます。
    私も本当は最後まで完走したいんです。

    どうしたら簡単で分かりやすいシートになるのかも、デザインから見直していて、ずっと悩んでて、作り直したりしてしまって…
    一番最初質問から大分変ってしまいました。

    コードが読めないので、注釈もお願いします。

    補足出来るところを見つけたので、
    管理表シートを添付します。
    画像が一つしか添付できないので、2つに分けて、請求書は後からすぐに送ります。

    本当にありがとうございます。
    諦めかけたのに、先が見えてきそうで、うれしいです。

    「続き…エクセルvba ①SUBメニューを」の補足画像6
    No.3の回答に寄せられた補足コメントです。 補足日時:2017/06/18 23:02
  • 引き続き、請求書シートを添付します。

    甘えっぱなしで、本当に恐縮です。
    お手数ですが、今後も勉強用サンプルとして大事にしていきたいので、コードと注釈
    お願いします。

    「続き…エクセルvba ①SUBメニューを」の補足画像7
    No.17の回答に寄せられた補足コメントです。 補足日時:2017/06/18 23:11
  • ごめんなさい。

    ①座標はあります。

    ②コードの前を選択して、一列茶色い●と茶色く反転されて、カーソル行の前まで実行やF5を押しても、「実行可能なステートメントがありません」になるのです。

    「続き…エクセルvba ①SUBメニューを」の補足画像8
    No.14の回答に寄せられた補足コメントです。 補足日時:2017/06/19 00:40
  • 今こんな状態です。今晩送った画像が最新です。

    この画像は4枚目。

    ごめんなさい。勝手に色々手を加えててしまって、VLOOKUPした時に座標シート消してしまってたり、21時のは座標シートが無かったです。

    勝手なことしてて、本当にごめんなさい。

    「続き…エクセルvba ①SUBメニューを」の補足画像9
      補足日時:2017/06/19 01:17
  • 今この状態です(>_<)

    「続き…エクセルvba ①SUBメニューを」の補足画像10
    No.28の回答に寄せられた補足コメントです。 補足日時:2017/06/19 01:22

A 回答 (32件中31~32件)

一応説明を


dim rg as range
for each rg in Worksheets("座標").UsedRange.columns(1).cells

rg というRange型変数でセルのA1からA9までループしたい。
というのが目的でこう記述しました。

1とか9とか書かずに実現できているのは、UsedRangeが
使用しているセル領域を表しているので、
その1列目
columns(1)
を全部たどりたいと。

その後ろに.cellsが付いているのは
そこで終わるとcolumnって型なので列の要素が一つしかないけど
(columns(1)がcolumnって型というところに要注意)

僕が欲しいのはRange型で要素が9つだから
Range型に戻してます。
こんな感じで型を一致させることをキャストっていいます。

rg がこうしてA1からA9までループするときに
並行してB列も使いたい。
それが
rg.offset(0,1).text & "4"

こういう記述のメリットは、表にあるだけ
全部やっちゃうから、何行あるか意識しないでいいんです。
もし9とか使っていたら、項目が増えて行追加したら
そこも変更しないと、いけないけど、それって覚えておくのが
大変でしょ?

あえて一つうかがいます。
いや、ちょっと待てよ。
前のスレッドで全然僕の聞いてること、答えてくれてないよね。

質問も変だけど、こっちの質問も鬼スルーって
そこが適性的に怪しいなあ・・・。
人相手は、それでも通用するかも知れないけど
コンピューターは、決してあなたに合わせてなんかくれないよ。

ま、いいや。これは答えて。
"4"だけど管理表ってシートには
4行目しかデータは入ってないの?
この回答への補足あり
    • good
    • 0
この回答へのお礼

私の知識不足で大変恐縮です。
説明文はまだ何となくではありますが、理解はできるのですが、
頂いたコードをどこに付けたらよいのかわかりませんでした。

補足に作成中のシートを添付しますので、コードお願いします。

お礼日時:2017/06/15 23:23

閉じられてて焦った。



>NO.2の回答をいただいた時に、で「ループ」で出来るのかと思ってしまいまして。
>SUB請求書のコードを読み直すときに、シンプルの方が確認しやすいかと思いまして…
>vbaの本で勉強中で、色々なコードを使ってみたいと…

全然違いますよね。

>請求書作成でシンプルにできる方法

これが同じものなんですか?
あなたの中では?
恐るべし・・・・。

ループのルの字も出てないし、その話とは全く想像も
付きませんでした。

僕は、文章通りにしか受け止めることが出来ないんです。
あなたの頭の中まで覗きにいく能力を生憎持ち合わせて
おりません。どうか本当にあなたの考えていることが
くまなく網羅されているか、再確認した後で書き込みボタンを
押すように、変更していただくようお願いします。

それに、僕はスマートって言ったけどシンプルとはいってないでしょ?
そこんとこで、まったく関連がさえぎられてたんです。

シンプルかどうかは、主観もあるから、僕的にはシンプルとも
思うけど、それがあなたにとってシンプルかは、甚だ疑問です。

シンプルって、僕の感覚としては、単純明快みたいなイメージで。
でも書いてることが理解出来なかったら、それはシンプルでも
なんでもないですよね。

そういう意味で、僕がスマートと思うように書く事が
あなたにとってシンプルかどうかは、全く異なるものと思うんです。

図の様に座標ってシートを準備したとして

dim rg as range
for each rg in Worksheets("座標").UsedRange.columns(1).cells
Worksheets("請求書").Range(rg).Value = Worksheets("管理表").Range(rg.offset(0,1).text & "4").Value
next

ね?僕はシンプルと思ってますが、如何ですか?
「続き…エクセルvba ①SUBメニューを」の回答画像1
    • good
    • 0
この回答へのお礼

本当に…すみませんでした。スルーするつもりなんて毛頭ありませんでした⤵
長い間、参考書を見たり、悩んでいましたので、解決が出来て、うれしさのあまり、うっかりベストアンサーしてしまった次第です<m(__)m>
いつもお世話になっているのにも関わらず、非礼を働き、申し訳ありませんでした。
今後、充分に注意する所存ですので、これからもご指導お願いいたします。

管理表はまだ作っている段階ですが、50行分あります。
請求間隔がそれぞれ違うため、行ごとに期日を管理と請求書を発行しているのです。各行の右端にコマンドボタンを置いて実行していくつもりです。
完成したコードを50個コピーするよりも、良い方法を教えていただけたらと思ったのです<m(__)m>

回答ありがとうございます。

まずはお詫びの気持ちを一刻も早くお伝えしたいので、お礼を書いてから、早速チャレンジしてみます。

お礼日時:2017/06/15 23:04
←前の回答 1  2  3  4

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング

おすすめ情報