
前回質問詳細
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
ループという技を是非取り入れてみたいです。
ご教授お願いします。
No.22
- 回答日時:
ブレークポイントとステップ実行が実は肝なんです。
実際に希望通りに動作する事が目的ではあるんですが、
実はなぜ期待通りに動かないかを、見つける能力こそが
カギになってくるんです。
それには、動作途中でセルや変数が本当に希望の値になっているかを
確認したり、ループなどでは期待通りに繰り返してその行に
戻ってきているかをステップ実行で実行行を目で追ったり
地道な作業ですけど、これをちゃんと出来ないで
理解はほぼ不可能といってもいいと思います。
マクロはまぐれではなかなか動きません。
全ての文章が本当に予測通りに動いて初めて実現しますが
人間ですから、ちょっとした思い違いや、思い込みで
予測を誤っている場合が、ままあるんです。
今回の僕のコードもそういう意味で、実際のデータ無しに
考えたので、誤っている可能性は少なからずあって
動作確認をお願いしました。
そして今そのデバッグ段階です。
デバッグはバグ(虫)を退治するみたいな言葉で
バグるは今や日本語化してますけど、
バグ自体はコンピューターのプログラム上の誤りを指す言葉ですね。
ご協力お願いします、そして一緒に完成出来たらいいですね。
それから、後で考えたんですが管理表に乗せてもこのコードは
Target.Addressのみの変更で動きますね。
もしかしたら管理番号は管理表の方にあるから
目で確認して入力できることからすれば、そっちの
方が妥当な気がしてきました。
注釈を見てもらえば判りますが、シートの入れ替えはいけません。
もし可能性があるとしたら、請求書の方を新規で
作成した場合にそれを管理表の新しい行に登録する場合に
代入のコピー元とコピー先が入れ替えで成立するかもしれないです。
No.21
- 回答日時:
え?
もしかして女性?
もしそうだったら言葉遣いひどすぎました。
申し訳ありません。
別に女性を軽んじてるとかじゃなく
素直に言葉遣いくらいはジェントルにしときたかったです。
ごめんなさい。
お詫びにではないけど、ご要望の注釈をば
’
’ 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
こんにちは。
はい。女性です。
実は…本当は教えて頂いた所をしっかり読み直して、勉強したかったんですが、怖くて、悲しくて、いっぱいいっぱいになってしまって、しっかり読めなくて。
No.20
- 回答日時:
>動かないです…
>コードが読めない私には難易度が高いです。
今No15のとこだから。
考えろなんて言ってません。
ブレークポイントはどうなってるの?
もしそこで止まらないのなら
If Target.Address =
の行にブレークポイントを設定して
C14に入力してください。
そしてイミディエイトウィンドウに
? Target.Address
と打って何が表示されたか教えてください。
ちなみに止まったところでF8を押すとステップ実行といって
1行ずつ進むのでそれを、まずは目で追ってみて。
レス遅くてごめん
返信ありがとうございます。
せっかく何度も指導していただいてるのに、コードが読めなくって、出来なくって、泣けてしまって、NO 20の文章が頭に入ってこなくて、進められなくて。
また明日、気持ちを立て直して、試してみます。
今日も沢山ありがとうございます。
No.19
- 回答日時:
思うんだけどさ。
仕事で仮に上司に新しい機械を買ったから
動作確認してって言われたとき、
動かなかったら改造する奴っている?
動作確認の言葉が通じないのかなぁ。
ホント、理解できない。
それにその時点を残してないのも。
改造テストするなら新規の名前で保存して
もしくは別フォルダーに全部コピーしてやるとか。
コードもろくに読めない私のVBAの勉強にお付き合いいただいて、ありがとうございます。
感謝の気持ちをお伝えしたくて。
ご指摘はごもっともですので、まずは素直に受け止めたいと思います。
厳しくて、委縮してしまって普段しないようなミスも起こしてしまい、思考停止状態になってきています。
質問をお願いしてあったのに恐縮ですが、今日はもう休みます。
おやすみなさい。
今日も沢山教えていただいて、ご指導ありがとうございました。
No.18
- 回答日時:
コードに変更なんかないよ。
いやまて
C17になったのかな?
じゃあ$C$17そこだけ。
あとは座標のテーブルは自分で触れるよね。
No.15
- 回答日時:
図の茶色の〇の所を(最初は〇ないけど)
クリックすると〇が付いて行も色が変わります。
これでC14に入力してみてください。
ここで停止するはずなんですが、ここで止まらないならなんらかの
誤りがあるので次どうするか、考えます。

ありがとうございました。
お礼する枠が違うんですが、注釈ありがとうございました。
請求書に転記出来て、素敵な請求書が出来上がりました。
注釈まで頂いて、わかりやすくって、参考資料として、大事にしたいと思います。
最後に二つお願いします。
①Range("n5").Formula = WorksheetFunction.EDate(Range("n5"), Range("g5"))
6行目以降も変更できるようにしたいです。
②管理表シートのp5(p6以降も同じように)に「請求書」シートの発行日と同日とコメント(g8)
コメント例:「6/18請求書」
書き込むことは可能でしょうか?
お手数ですが、コードと注釈もお願いします。
No.14
- 回答日時:
落ち着いて聞いてね。
動作確認してって言ってるわけ。
何違う事してんの?
>管理表のシートから請求書シートに転記されないです。
この内容を詳しく言わないと意味がないわけ。
エラーは出たのか出ないのか?
何の動作も見せないのか、あるいは多少は動いたのか。
戻ってください。勝手なことしないで!!!
デバッグを説明しますので。
そこをほっといて次の事勝手に始める神経が意味不明です。
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
を管理表のシートのプライベートモジュールに貼ったんですが、請求書シートに転記動作しないです。
デバックは表示されていません。
ご教授お願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでフィルターした値を...
-
エクセルの文字数列関数と競馬...
-
エクセルシートの見出しの文字...
-
表計算ソフトでの様式の呼称
-
エクセルに写真が貼れない(フ...
-
【画像あり】【関数】指定した...
-
【関数】3つのセルの中で最新...
-
【マクロ】excelファイルを開く...
-
【マクロ】【画像あり】4つの...
-
【マクロ】【画像あり】ファイ...
-
空白のはずがSUBTOTAL関数でカ...
-
LibreOffice Clalc(またはエク...
-
【関数】=EXACT(a1,b1) a1とb1...
-
【マクロ】【画像あり】4つの...
-
Office2021のエクセルで米国株...
-
エクセルのVBAで集計をしたい
-
【マクロ】実行時エラー '424':...
-
【マクロ】【画像あり】❶ブック...
-
グループごとの人数のカウント
-
勤怠表について ABS、TEXT関数...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA 作業後に選択範囲...
-
別のフォームで記述している関...
-
VBAでのユーザフォームの表示有...
-
エクセル マクロ 別シートから...
-
ascW関数の結果がおかしい
-
ACCESSで別DBにあるクエリを...
-
Sub Auto_Open() 実行されない
-
Excel VBA 選択範囲の罫線色の...
-
円の中に等間隔に線を引くには
-
ステップモードの動作確認方法
-
GetAsyncKeyState() を利用する...
-
最小化ボタンで最小化したフォ...
-
ExcelVBAで毎月月初の最初にBoo...
-
Visual Basic 6.0のフォームの...
-
メニューバーのイベントが2回...
-
excelのvbaを使って日付を置換...
-
Excelで、チェックボックスにチ...
-
C++Builderのエラー...
-
Excelのマクロ実行後に動作が重...
-
ExcelVBA ドロップボックスで月...
おすすめ情報
添付の写真が管理表のシートです。
A列番号は順番にはなっていません。(管理番号みたいなものです。)
A列は50行まで表があります。
お手数ですが、前回の質問の時のコードに上書き記載お願いしてもよろしいでしょうか?
お世話になります。
改めて考え方を変えてみました。
「管理表」のn2に検索値を設けたかったので、If Target.Address = "$n$2" Then
に入れ替えてみました。
そうすると、請求開始日を変更するコードの Range("n5").Formula = WorksheetFunction.EDate(Range("n5"), Range("g5"))
がn5はちゃんと起動しますが、n6以降が動かないです。
管理表の画像を添付します。
ご教授お願いします。
★「請求書」にvlookをいれてみました。
これで請求書に転記出来ました。
プリントアウトのコードを入れました。
ごめんなさい(慌慌)
請求書に書いたvlookを消しました(汗)
動作確認してみました。
管理表のシートから請求書シートに転記されないです。
私の上書きミスだと思うのですが。
ご教授お願いします。
請求書のシート添付します。
管理表のn2で請求書に転記するって自己流で上書きしみました。文字オーバーで一部抜粋です。
コード変更箇所です。
Address = "$n$2" Then
請求書と管理表の文字を入れ替えました。Worksheets("管理表")の部分3か所です。
大変心強いです。ありがとうございます。
請求書シートのc16に=管理表!N2と入れたら成立出来ました。
これで大丈夫でしょうか?
>イミディエイトウィンドウに
? Target.Address
と打って何が表示されたか教えてください。
>地道な作業ですけど、これをちゃんと出来ないで
理解はほぼ不可能といってもいいと思います。
一行づつ辿っていって、コードの動作を把握したいと思っているんですが、うまくできません。
画像を添付します。
ご教授お願いします。
ステータスが無いと表示されたので、あれこれ調べていました。
ごめんなさい(汗)出来たと思っていたのは、消したとばかり思っていたvlook関数が入っていました(/o\)
vlookを消して請求書シートに頂いたコードを入れて、請求書の番号”c16”に管理番号を入れても無反応でしたので、
ステップ実行しました。
画像を添付します。
管理表と請求書は補足で送った通りのモノで変わりはないです。
私が無知過ぎて、yokomayaさんの大切な時間を割いていただいてるのが、心苦しくって。
VLOOKUP関数を使って、管理表のn2に検索値を設けて、請求書に内容を添付させることにします。
以前回答頂いた、
Range("n5").Formula = WorksheetFunction.EDate(Range("n5"), Range("g5"))
でn6以降50列分同じ操作出来るコードはありますか?
諦めなくっていいんですか…ありがとうございます。
私も本当は最後まで完走したいんです。
どうしたら簡単で分かりやすいシートになるのかも、デザインから見直していて、ずっと悩んでて、作り直したりしてしまって…
一番最初質問から大分変ってしまいました。
コードが読めないので、注釈もお願いします。
補足出来るところを見つけたので、
管理表シートを添付します。
画像が一つしか添付できないので、2つに分けて、請求書は後からすぐに送ります。
本当にありがとうございます。
諦めかけたのに、先が見えてきそうで、うれしいです。
引き続き、請求書シートを添付します。
甘えっぱなしで、本当に恐縮です。
お手数ですが、今後も勉強用サンプルとして大事にしていきたいので、コードと注釈
お願いします。
ごめんなさい。
①座標はあります。
②コードの前を選択して、一列茶色い●と茶色く反転されて、カーソル行の前まで実行やF5を押しても、「実行可能なステートメントがありません」になるのです。
今こんな状態です。今晩送った画像が最新です。
この画像は4枚目。
ごめんなさい。勝手に色々手を加えててしまって、VLOOKUPした時に座標シート消してしまってたり、21時のは座標シートが無かったです。
勝手なことしてて、本当にごめんなさい。
今この状態です(>_<)