[[20170430185803]] 『空白セルを無視するには』(take) ページの最後に飛ぶ

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

 

『空白セルを無視するには』(take)

 以前お世話になったのですが以下マクロした場合
空白セルがあるとマクロの動作が止まってしまいます。
空白セルが存在しても最後の並び替えで最下行に移動、または無視
したいのですがどのような修正が必要でしょうか?
よろしくお願いします。

Sub Sample()

    Dim c As Range
    Dim d As Range
    Dim s As String
    Dim tmp As String
    Dim shM As Worksheet
    Dim shD As Worksheet

    Set shD = Sheets("見積書提出一覧")  '★データシート
    Set shM = Sheets("Sheet2")  '★法人格リストシート

    If shD.Range("X5").Value = "" Then
        MsgBox "データがありません。管理者に連絡してください"
        Exit Sub
    End If

    shM.Columns("B:E").ClearContents

    'フィルターオプションによる一意の名前リストの作成
    shD.Range("X4", shD.Range("X" & Rows.Count).End(xlUp)).AdvancedFilter xlFilterCopy, , shM.Range("C1"), True
    '法人格消去とフリガナ設定
    With CreateObject("VBScript.RegExp")
        .Global = True
        .Pattern = "([\$\?\*\+\.\|\{\}\\\[\]\(\)])"
        tmp = Join(WorksheetFunction.Transpose(shM.Range("A1", shM.Range("A" & Rows.Count).End(xlUp))), vbTab)
        .Pattern = Replace(.Replace(tmp, "\$1"), vbTab, "|")
        For Each c In shM.Range("C1").CurrentRegion
            c.Offset(, 1).Value = Application.GetPhonetic(.Replace(c.Value, ""))
        Next
    End With
    '並び替え
    shM.Range("C1").CurrentRegion.Sort Key1:=shM.Range("D1"), Order1:=xlAscending, Header:=xlYes

 End Sub

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


とりあえす、2箇所のCurrentregionをやめて

shM.Range("C1",shM.Range("C" & rows.count).end(xlup))


shM.Columns("c:d")

とするとどうなりますか。

(マナ) 2017/04/30(日) 19:46


(マナ)さん
恐るべし、一発で問題解決いたしました。

VBScript.RegExpの正規表現なのかなと思い
web検索いろいろしてみたのですがさっぱり解決の糸口には
当たりませんでした。質問してよかったです。
>2箇所のCurrentregionをやめて
Currentregionって、かたまりのセル?
空白とどのように関わるか解りませんが
希望の動作しています。
ありがとうございました。
(take) 2017/04/30(日) 20:04


ついで。
コードを貰うだけでなく、調べたほうが精神衛生に良くないですか?
 
>Currentregionって、かたまりのセル?
>空白とどのように関わるか解りませんが
>希望の動作しています。
かたまりのセル? 概ねその理解でOK 。
CurrentRegionのヘルプぐらい読むともっと良い。
 
その例で言えば、
C1にカーソルを置いて、
Ctrlを押しながら * を押した時に選択されているセル範囲です。
 
途中に空白があると、そこで範囲が伸びていかずに途切れるのですよ。
空白で囲まれた領域だから、その空白の前の行までに限定される訳です。
(γ) 2017/04/30(日) 20:39

(γ)さん
コメントいただいていたのですね
気がつきませんでした。
>Ctrlを押しながら * を押した時に選択されているセル範囲です。
実行してみました。確かに、空白セルで終わってしまいました。なるほど!
CurrentRegion マクロの使い方はよくわかりませんが
次出てきたときには、ある程度理解できそうです。
ありがとうございました。

(take) 2017/05/01(月) 01:13


コメント返信:

[ 一覧(最新更新順) ]


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