[[20220930100226]] 『空白セルをハイフンで埋めたい』(しめじ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『空白セルをハイフンで埋めたい』(しめじ)

C列の空白セルを空白の「一つ上のセルの値」で埋める下記マクロを「一つ上のセルの値」ではなく「-」で埋めたいのですがコードをどのように変更したらよいか解りません。助けてください。

 Dim Rw As Long
 Dim ADat As String
 Dim BVal As Long
 For Rw = 3 To Cells(Rows.Count, 3).End(xlUp).Row
 With Cells(Rw, 3)
 If Rw = 3 Then
 ADat = .Value
 BVal = .Offset(, 1).Value
 Else
 If .Value = "" Then
 .Value = ADat
 Else
 ADat = .Value
 End If
 If .Offset(, 1).Value = "" Then
 .Offset(, 1).Value = BVal
 Else
 BVal = .Offset(, 1).Value
 End If
 End If
 End With
 Next

< 使用 Excel:Office365、使用 OS:Windows10 >


 On Error Resume Next
 Range("C3:C" & Cells(Rows.Count, 3).End(xlUp).Row).SpecialCells(xlCellTypeBlanks).Value = "-"
 On Error GoTo 0

 ではどうだろうか?
 SpecialCells(xlCellTypeBlanks)
 で空白セルをまとめて選択してそこに-を入れてる。
 On Error
 は空白セルがない場合用。
(ねむねむ) 2022/09/30(金) 10:29

  Range("C3", Cells(Rows.Count, "C").End(xlUp)).Replace What:="", Replacement:="-", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False
 こういう方法も 
 置換をつかうと "" も置き換え対象です
(´・ω・`) 2022/09/30(金) 10:39

D列の値については一つ上のセルのままですか?
元のコードに手を入れてみました。

 Sub Sample()
    '不要になったため変数ADatを削除
    Dim Rw As Long
    Dim BVal As Long
    For Rw = 3 To Cells(Rows.Count, 3).End(xlUp).Row
        With Cells(Rw, 3)
            '空白を「-」に変える(C列)
            If .Value = "" Then
                .Value = "-"
            End If
            '空白を一つ上のセルの値で埋める(一つ右隣り=D列)
            If Rw = 3 Then
                BVal = .Offset(, 1).Value
            Else
                If .Offset(, 1).Value = "" Then
                    .Offset(, 1).Value = BVal
                Else
                    BVal = .Offset(, 1).Value
                End If
            End If
        End With
    Next
End Sub
(下手の横好き) 2022/09/30(金) 10:47

みなさんありがとうございます。下手の横好きさんのコードで追加の質問になりますが、C列1行目が空欄だった場合、「‐」を入れるにはどのようなコードの追加が必要になりますでしょうか。

  C列
_____
1  
_____
2 りんご
_____
3  _
_____
4 みかん

 

(しめじ) 2022/09/30(金) 12:19


>For Rw = 3 To Cells(Rows.Count, 3).End(xlUp).Row

>If Rw = 3 Then

があるので3行目からデータがあるものと認識していましたが違っていたのですか?
この2つの「Rw = 3」を「Rw = 1」に変えると1行目からデータ処理を開始します。
(下手の横好き) 2022/09/30(金) 13:38


ありがとうございます。助かりました。
(しめじ) 2022/09/30(金) 13:48

下手の横好きさん >D列の値は一つ上の値のままですか
D列の値は上の値をコピーせず何もしないとしたら何処を変更したらよいでしょうか。教えていただけると助かります。よろしくお願いいたします。

(しめじ) 2022/09/30(金) 16:34


ご質問の意図と違う答えですが、
パワークエリで実行するとこんな感じです。

let

    ソース = Excel.CurrentWorkbook(){[Name="テーブル1"]}[Content],
    変更された型 = Table.TransformColumnTypes(ソース,{{"列1", type text}, {"列2", type text}, {"列3", type text}}),
    置き換えられた値 = Table.ReplaceValue(変更された型,null,"−",Replacer.ReplaceValue,{"列3"})
in
    置き換えられた値

最近どんなことでもパワークエリで実行させてみています。
(VBAでの回答でなくてすみません。でもパワークエリの方が簡単かなと思いまして・・・
 いろんな方法ありますという意味合いで・・・)
(まっち) 2022/09/30(金) 16:59


 Sub Sample()
    Dim Rw As Long
    Dim BVal As Long
    For Rw = 1 To Cells(Rows.Count, 3).End(xlUp).Row
        With Cells(Rw, 3)
            '空白を「-」に変える(C列)
            If .Value = "" Then
                .Value = "-"
            End If
        End With
    Next
End Sub
D列の処理を省くとこうなります。
(下手の横好き) 2022/09/30(金) 17:24

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.