重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

前回質問詳細
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件中11~20件)

ブレークポイントとステップ実行が実は肝なんです。


実際に希望通りに動作する事が目的ではあるんですが、
実はなぜ期待通りに動かないかを、見つける能力こそが
カギになってくるんです。

それには、動作途中でセルや変数が本当に希望の値になっているかを
確認したり、ループなどでは期待通りに繰り返してその行に
戻ってきているかをステップ実行で実行行を目で追ったり
地道な作業ですけど、これをちゃんと出来ないで
理解はほぼ不可能といってもいいと思います。

マクロはまぐれではなかなか動きません。
全ての文章が本当に予測通りに動いて初めて実現しますが
人間ですから、ちょっとした思い違いや、思い込みで
予測を誤っている場合が、ままあるんです。

今回の僕のコードもそういう意味で、実際のデータ無しに
考えたので、誤っている可能性は少なからずあって
動作確認をお願いしました。

そして今そのデバッグ段階です。
デバッグはバグ(虫)を退治するみたいな言葉で
バグるは今や日本語化してますけど、
バグ自体はコンピューターのプログラム上の誤りを指す言葉ですね。

ご協力お願いします、そして一緒に完成出来たらいいですね。

それから、後で考えたんですが管理表に乗せてもこのコードは
Target.Addressのみの変更で動きますね。
もしかしたら管理番号は管理表の方にあるから
目で確認して入力できることからすれば、そっちの
方が妥当な気がしてきました。

注釈を見てもらえば判りますが、シートの入れ替えはいけません。

もし可能性があるとしたら、請求書の方を新規で
作成した場合にそれを管理表の新しい行に登録する場合に
代入のコピー元とコピー先が入れ替えで成立するかもしれないです。
この回答への補足あり
    • good
    • 0

え?


もしかして女性?
もしそうだったら言葉遣いひどすぎました。
申し訳ありません。
別に女性を軽んじてるとかじゃなく
素直に言葉遣いくらいはジェントルにしときたかったです。
ごめんなさい。

お詫びにではないけど、ご要望の注釈をば


’ WorkSheet上のセルの値に変更があると呼び出されるイベント

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rg As Range, fd As Range ’変数宣言 fdは検索時に利用

If Target.Address = "$C$17" Then
 ’C17セルに変更があった場合のみ動作する
Set fd = Worksheets("管理表").Columns(1).Cells.Find(Target.Text)
  ’シート管理表の、A列で、C14に入力された文字を検索する
If Not fd Is Nothing Then '見つからない場合にはfdがNothingになるので
   'それのNotつまりは見つかったら
Application.EnableEvents = False  ’これから代入するので変更があると
     ’ここに戻ってきてしまうことを防止するためにイベント禁止状態にする。
'座標シートのセル座標通りにセル内容を代入
For Each rg In Worksheets("座標").UsedRange.Columns(1).Cells
Worksheets("請求書").Range(rg).Value = Worksheets("管理表").Range(rg.Offset(0, 1).Text & fd.Row).Value
Next
Application.EnableEvents = True  ’イベント禁止の解除
Else  ’検索して見つからない場合の表示
MsgBox Target.Text & "は登録されていません"
End If
End If
End Sub
    • good
    • 0
この回答へのお礼

こんにちは。
はい。女性です。
実は…本当は教えて頂いた所をしっかり読み直して、勉強したかったんですが、怖くて、悲しくて、いっぱいいっぱいになってしまって、しっかり読めなくて。

お礼日時:2017/06/18 10:39

>動かないです…


>コードが読めない私には難易度が高いです。
今No15のとこだから。
考えろなんて言ってません。
ブレークポイントはどうなってるの?
もしそこで止まらないのなら
If Target.Address =
の行にブレークポイントを設定して
C14に入力してください。
そしてイミディエイトウィンドウに
? Target.Address
と打って何が表示されたか教えてください。
ちなみに止まったところでF8を押すとステップ実行といって
1行ずつ進むのでそれを、まずは目で追ってみて。

レス遅くてごめん
    • good
    • 0
この回答へのお礼

返信ありがとうございます。
せっかく何度も指導していただいてるのに、コードが読めなくって、出来なくって、泣けてしまって、NO 20の文章が頭に入ってこなくて、進められなくて。

また明日、気持ちを立て直して、試してみます。
今日も沢山ありがとうございます。

お礼日時:2017/06/17 23:03

思うんだけどさ。



仕事で仮に上司に新しい機械を買ったから
動作確認してって言われたとき、
動かなかったら改造する奴っている?
動作確認の言葉が通じないのかなぁ。

ホント、理解できない。

それにその時点を残してないのも。

改造テストするなら新規の名前で保存して
もしくは別フォルダーに全部コピーしてやるとか。
    • good
    • 0
この回答へのお礼

コードもろくに読めない私のVBAの勉強にお付き合いいただいて、ありがとうございます。
感謝の気持ちをお伝えしたくて。

ご指摘はごもっともですので、まずは素直に受け止めたいと思います。
厳しくて、委縮してしまって普段しないようなミスも起こしてしまい、思考停止状態になってきています。

質問をお願いしてあったのに恐縮ですが、今日はもう休みます。
おやすみなさい。
今日も沢山教えていただいて、ご指導ありがとうございました。

お礼日時:2017/06/17 22:51

コードに変更なんかないよ。


いやまて
C17になったのかな?
じゃあ$C$17そこだけ。
あとは座標のテーブルは自分で触れるよね。
    • good
    • 0
この回答へのお礼

動かないです…
コードが読めない私には難易度が高いです。
お手数ですが、行ごとのコードに翻訳をお願いします。

お礼日時:2017/06/17 21:03

判らねえのに触ろうって百年早ええんだよ。


動くわけねえべ。

Set fd = Worksheets("請求書").
管理表にしかA列に管理番号ないじゃん。
コピペしたもので試せっつうの。
「続き…エクセルvba ①SUBメニューを」の回答画像17
この回答への補足あり
    • good
    • 0
この回答へのお礼

あっ…そうでした( ;∀;)
昨日までの請求書は全て上書きしまいました。
古い方で試したいんですが、実はもうデータが…(涙)

お手数かけて大変申し訳ないのですが、新しい方でコードをお願いします。

お礼日時:2017/06/17 20:31

ふざけてんの?



何勝手に変更してるの?
No4のコピペしたものじゃないじゃん。
"$n$2"
請求書でC14っていってるじゃない。
まともにやってよ。
だいたい文字列比較だから大文字しか通用しないとこだし。
厳密にやらないならつきあえないよ。
    • good
    • 0
この回答へのお礼

ご指摘ごもっともですが、怒られすぎて胃が痛いし、悲しいです。

お礼日時:2017/06/17 20:44

図の茶色の〇の所を(最初は〇ないけど)


クリックすると〇が付いて行も色が変わります。
これでC14に入力してみてください。
ここで停止するはずなんですが、ここで止まらないならなんらかの
誤りがあるので次どうするか、考えます。
「続き…エクセルvba ①SUBメニューを」の回答画像15
    • good
    • 0
この回答へのお礼

ありがとうございました。
お礼する枠が違うんですが、注釈ありがとうございました。

請求書に転記出来て、素敵な請求書が出来上がりました。
注釈まで頂いて、わかりやすくって、参考資料として、大事にしたいと思います。

最後に二つお願いします。

①Range("n5").Formula = WorksheetFunction.EDate(Range("n5"), Range("g5"))
6行目以降も変更できるようにしたいです。

②管理表シートのp5(p6以降も同じように)に「請求書」シートの発行日と同日とコメント(g8)
コメント例:「6/18請求書」
書き込むことは可能でしょうか?

お手数ですが、コードと注釈もお願いします。

お礼日時:2017/06/18 11:26

落ち着いて聞いてね。


動作確認してって言ってるわけ。
何違う事してんの?

>管理表のシートから請求書シートに転記されないです。
この内容を詳しく言わないと意味がないわけ。
エラーは出たのか出ないのか?
何の動作も見せないのか、あるいは多少は動いたのか。
戻ってください。勝手なことしないで!!!
デバッグを説明しますので。

そこをほっといて次の事勝手に始める神経が意味不明です。
この回答への補足あり
    • good
    • 0
この回答へのお礼

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rg As Range, fd As Range

If Target.Address = "$n$2" Then
Set fd = Worksheets("請求書").Columns(1).Cells.Find(Target.Text)
If Not fd Is Nothing Then
Application.EnableEvents = False
For Each rg In Worksheets("座標").UsedRange.Columns(1).Cells
Worksheets("管理表").Range(rg).Value = Worksheets("請求書").Range(rg.Offset(0, 1).Text & fd.Row).Value
Next
Application.EnableEvents = True
Else
MsgBox Target.Text & "は登録されていません"
End If
End If
End Sub
 を管理表のシートのプライベートモジュールに貼ったんですが、請求書シートに転記動作しないです。
デバックは表示されていません。
ご教授お願いします。

お礼日時:2017/06/17 19:02

読もうよ。

てか読んで下さい。
vlookupやれなんて言ってないよ。
動作確認なぜスルー?
    • good
    • 0

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