人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

指定の文字列を含むセルのみ、左から60文字以上の文字列を削除したい。
今、次のようなデータがA列の1行目からズラリと並んでいるとします。

-----------------------------------------
aaa
bbb
ccc
【長い】abcdefgggggggggggggggggggggggggggh
ddd
eee
fff





-----------------------------------------

15000行ほどです。
ここにおきまして、上記のように“【長い】”という文字列を含むセルがいくつかあります。
そのセルだけを、“【長い】”という4文字分も含めまして、合計で左から60文字だけにしたいのです。
61文字以上の文字は削除したいのです。
関数およびマクロ等で効率的に処理する方法等、もしありましたらご教授いただきたい次第です。
よろしくお願い致します。

●質問者: moon-fondu
●カテゴリ:コンピュータ 学習・教育
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● a-kuma3
●300ポイント ベストアンサー

式でやるとしたら、こんな感じです。

=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))

moon-fonduさんのコメント
ありがとうございます、うまくいきました! 空白セルの場合は「0」が返されるようですが。 この空白セルも、空白セルのまま返す、ということはできないでしょうか?

a-kuma3さんのコメント
>> 空白セルの場合は「0」が返されるようですが。 この空白セルも、空白セルのまま返す、ということはできないでしょうか? << 回答に追記しました。

moon-fonduさんのコメント
ありがとうございます、うまくいきました!

2 ● きゃづみぃ
●300ポイント
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

moon-fonduさんのコメント
標準モジュールでやってみたのですが、なぜかうまく稼働しませんでした・・・。

きゃづみぃさんのコメント
対象のシートのところでやればいいです。

moon-fonduさんのコメント
すごいです、60文字以上がパッと消えました!ありがとうございます。

質問者から

お二人ともありがとうございます。
a-kuma3さんもきゃづみぃさんもどちらもベストアンサーなのですが、一人しか選べないので、早く回答いただいたa-kuma3さんの方にさせていただきました。私は返事が遅くなったのにすみません・・・(^_^;)


関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ