今、次のようなデータがA列の1行目からズラリと並んでいるとします。
-----------------------------------------
aaa
bbb
ccc
【長い】abcdefgggggggggggggggggggggggggggh
ddd
eee
fff
・
・
・
・
・
-----------------------------------------
15000行ほどです。
ここにおきまして、上記のように“【長い】”という文字列を含むセルがいくつかあります。
そのセルだけを、“【長い】”という4文字分も含めまして、合計で左から60文字だけにしたいのです。
61文字以上の文字は削除したいのです。
関数およびマクロ等で効率的に処理する方法等、もしありましたらご教授いただきたい次第です。
よろしくお願い致します。
式でやるとしたら、こんな感じです。
=IF(ISERROR(FIND("【長い】",A1)),A1,LEFT(A1,60))
もしくは、
=IF(ISERROR(FIND("【長い】",A1)),A1,LEFTB(A1,60))
最初の LEFT は文字数。半角英数もひらがな漢字も1文字です。
二番目の LEFTB はバイト数。
全角だけだと30文字になります。
"【長い】" の文字の判定が要らないのであれば、LEFT もしくは LEFTB だけで OK です。
60文字未満はそのまま表示されます。
=LEFT(A1,60)
空白セルの場合は「0」が返されるようですが。
この空白セルも、空白セルのまま返す、ということはできないでしょうか?
式を、以下のようにしてください。
=IF(ISERROR(FIND("【長い】",A1)),IF(ISBLANK(A1),"",A1),LEFT(A1,20))
式でやるとしたら、こんな感じです。
=IF(ISERROR(FIND("【長い】",A1)),A1,LEFT(A1,60))
もしくは、
=IF(ISERROR(FIND("【長い】",A1)),A1,LEFTB(A1,60))
最初の LEFT は文字数。半角英数もひらがな漢字も1文字です。
二番目の LEFTB はバイト数。
全角だけだと30文字になります。
"【長い】" の文字の判定が要らないのであれば、LEFT もしくは LEFTB だけで OK です。
60文字未満はそのまま表示されます。
=LEFT(A1,60)
空白セルの場合は「0」が返されるようですが。
この空白セルも、空白セルのまま返す、ということはできないでしょうか?
式を、以下のようにしてください。
=IF(ISERROR(FIND("【長い】",A1)),IF(ISBLANK(A1),"",A1),LEFT(A1,20))
空白セルの場合は「0」が返されるようですが。
この空白セルも、空白セルのまま返す、ということはできないでしょうか?
回答に追記しました。
ありがとうございます、うまくいきました!
Sub main() Dim a As Long For a = 1 To Rows.Count If Cells(a, "A") = "" Then Exit For If InStr(Cells(a, "A"), "【長い】") > 0 Then Cells(a, "A") = Left(Cells(a, "A"), 60) End If Next a End Sub
対象のシートのところでやればいいです。
すごいです、60文字以上がパッと消えました!ありがとうございます。
お二人ともありがとうございます。
a-kuma3さんもきゃづみぃさんもどちらもベストアンサーなのですが、一人しか選べないので、早く回答いただいたa-kuma3さんの方にさせていただきました。私は返事が遅くなったのにすみません・・・(^_^;)
回答に追記しました。
2015/04/19 06:38:22ありがとうございます、うまくいきました!
2015/04/23 00:49:39