VBAを勉強し始めた初心者です。
https://oshiete.goo.ne.jp/qa/5219546.html の回答を参考に空白を上のセルを参照して入力するように書きました。
Sub Fill_In_Blank ()
Dim i As Integer
Dim S As String
S = ""
For i = 18 To Range("D" & Rows.Count).End(xlUp).Row
If Cells(i, 3) = "" Then
Cells(i, 3).Value = S
Else
S = Cells(i, 3).Value
End If
Next i
End Sub
しかし、添付画像のようにうまくいきません。C28以降のセルで入力されてしまいます。テーブルを使用しているのがいけないのでしょうか。調べてコードの意味を理解していますが(理解しているつもりだけなのかもしれません)、どこが間違っているか解りません。ご教示願います。
No.7ベストアンサー
- 回答日時:
こんばんは!
横からお邪魔します。
No.2さんのお礼欄に
>表示されていない「ゼロ」が隠れていたこと
すなわちオプションの「ゼロ値のセルにゼロを表示する」のチェックが外れているのでしょうか?
また、空白に見えてもスペースが入っているセルが存在する可能性もあるかもしれないので、
その辺を対処してみました。
尚、C18セルは何らかのデータが入っているという前提です。
Sub Sample1()
Dim i As Long, myStr As String
For i = 18 To Cells(Rows.Count, "D").End(xlUp).Row
If Cells(i, "C") <> 0 And Len(Trim(Cells(i, "C"))) > 0 Then
myStr = Cells(i, "C")
Else
Cells(i, "C") = myStr
End If
Next i
End Sub
※ 質問文のコードではD列で最終行を取得するようですので、
D列に表示されていない何らかのデータがある場合はその行まで表示されてしまいます。
これはどの列で最終行を取得するか?によって変わってくると思います。m(_ _)m
ありがとうございます。皆様に感謝です。ご提示頂いたコードの結果は、私の求めるものにかなり近いです。まだ、D列の一番最後が、ずらずらとテーブルの一番下まで続いてしまっています。テーブルに張り付けているのですが、テーブルの行を増やしたり、減らしたりすと、イミディエイトウィンドウに『?Range("D" & Rows.Count).End(xlUp).Row』を入力した数が変化することがわかりました。皆様にご協力いただき、本当に感謝しております。テーブルに張り付けなければ、うまく作動するのでその方向でいきます。
No.3
- 回答日時:
追記
最終行からxlUpで参照していますが、18行目からのxlDownの方が良いのでは?
『Range("D18").End(xlDown).Row』
ついでに文字列の退避を除外したバージョンを記載しておきます
Sub Fill_In_Blank()
Dim i As Integer
With ActiveSheet
For i = 18 To .Range("D18").End(xlDown).Row
If .Cells(i, 3) = "" Then
.Cells(i, 3).Value = .Cells(i - 1, 3).Value
End If
Next i
End With
End Sub
No.2
- 回答日時:
こんにちは
以下でテストしてみました。
新しいシートのC18セルから下方に、
1)ランダムに飛び飛びで値を入力し
2)さらに、(範囲の終わりを示すため)D列の適当なセルに値を入力
した状態で、ご提示のVBAを実行してみると、C18以下の空白セルにその上と同じ値が入力されます。
(C18から空白セルが続く場合は、その部分は空白のまま。)
これは、多分、質問者様が予定した処理通りの内容ではないかと思います。
>C28以降のセルで入力されてしまいます。
そのシートに、何らかの仕掛けが施してあるってことはありませんか?
(シートチェンジのイベント処理が設定してあるとか…)
ありがとうございます。
いろいろとさわってみて、分かったことが2つあります。
1つ目は、データを他のシートからコピーして貼り付け(値のみ)しているのですが、表示されていない「ゼロ」が隠れていたこと。過去に、オプションの設定のところで変更していたんだと思います。
2つ目は、貼り付け先がテーブルのため、No.1さんのご指示に従い、イミディエイトウィンドウに『?Range("D" & Rows.Count).End(xlUp).Row』を入力すると、一番最後の行より2つ多い数字が返ってきました。テーブルを削除して、「ゼロ」を手動で削除したとき、うまくいきました。
No.1
- 回答日時:
コードは基本的に合っていますが、Range参照およびCells参照が曖昧です。
Generalに記載していますがこれはワークシートですか?ThisWorkbookですか?標準モジュールですか?どちらにせよ一度イミディエイトウィンドウに『?Range("D" & Rows.Count).End(xlUp).Row』と入力してEnterしてみてください。その答えが27でない場合は別のシートが参照されている可能性があります。
特定のシートのみで使用するのであれば『Sheet名』を、複数のシートで使用するのであれば『ThisWorksheet』や『ActiveSheet』などシートを特定してからRangeやCellsを使ってください。
前提としてサブルーチンを呼び出す時には対象のシートが選択されていることが条件です。(例外あり)
ご回答ありがとうございます。
ワークシートです。
イミディエイトウィンドウに『?Range("D" & Rows.Count).End(xlUp).Row』と入力してみました。「27」ではなく「29」が出てきました!!
シートを下記の通り指定してみました。
Sub Blank_Fill_In()
Dim i As Integer
Dim S As String
S = ""
For i = 18 To Worksheets("シート名").Range("D" & Rows.Count).End(xlUp).Row
If Cells(i, 3) = "" Then
Cells(i, 3).Value = S
Else
S = Cells(i, 3).Value
End If
Next I
End Sub
まだ動きません。結果は同じ状態です。本当にすみません。まだVBAを勉強し始めて1週間なので、シートの指定方法が間違っていたらご教示ください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) ExcelVBAのマクロについて。 9 2022/05/04 14:50
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelの「0」だけ非表示、小数...
-
日付が未入力の際はゼロか、空...
-
エクセルで1月0日と表示される!!
-
エクセルで条件に一致したセル...
-
エクセルで、加筆修正したセル...
-
Rangeメソッドは失敗しました。...
-
(Excel)あるセルに文字を入力...
-
複数シートの同じセル内容を1シ...
-
労基法の週40時間を超える時...
-
Excelシートの保護時にデータの...
-
VBAで変数に関数式の結果をセッ...
-
エクセルで複写のように自動入...
-
エクセルのルビがついたセルを...
-
excelでハイパーリンクになって...
-
EXCELマクロで、シート間でのコ...
-
シート参照で変数を使いたい(EX...
-
エクセル ハイパーリンクで画像...
-
VBAで、セル(Range)のオブジ...
-
エクセルの文字
-
Excelのファイル容量が減らない...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで条件に一致したセル...
-
Excelの「0」だけ非表示、小数...
-
日付が未入力の際はゼロか、空...
-
(Excel)あるセルに文字を入力...
-
エクセルで1月0日と表示される!!
-
別シートのセルを絶対参照にする
-
複数シートの同じセル内容を1シ...
-
Rangeメソッドは失敗しました。...
-
Excelシートの保護時にデータの...
-
エクセルで複写のように自動入...
-
Excelで複数シートの選択セルを...
-
シート参照で変数を使いたい(EX...
-
ExcelでTODAY関数を更新させな...
-
エクセル ハイパーリンクで画像...
-
エクセルで、加筆修正したセル...
-
エクセルのセルに、マウスで選...
-
EXCEL関数でシート名が変わる可...
-
VBAで、セル(Range)のオブジ...
-
Excelのファイル容量が減らない...
-
excelでハイパーリンクになって...
おすすめ情報