- 締切済み
EXCELの文字列操作について
EXCEL2003において 下記のように列の不特定の場所に()で覆われた文字列があります。 行列ともに随時変更されます。 ( )内が1文字の時は、たとえばA4の(赤)をひとつ上のA3の名古屋に文字を結合し、名古屋(赤)としたいです。B列ならB3の(青)を茨城に結合し、茨城(青)といった感じにです。 また、C4のように( )内が2文字以上の時は、削除したいです。 A列 B列 C列 1 東京 千葉 北海道 2 大阪 茨城 長野 3 名古屋 (青) 鹿児島 4 (赤) 三重 (不適当) よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- mshr1962
- ベストアンサー率39% (7417/18945)
同じセルで行うならマクロしかないでしょうね。 別の列に数式で表示でいいなら D1=IF(ISNUMBER(SEARCH("(?)",ASC(A2))),A1&A2,A1) 又は D1=IF(ASC(REPLACE(A2,2,1,""))="()",A1&A2,A1) ところで(赤)等の文字は残したままでいいのでしょうか? 削除する場合、文字を上に詰める等の動作も含みますか? 締め切ってないようなので満足のいく回答が出ていないと思うのですが 何かあるようであれば補足したほうがいいですよ。
- enachi_jon
- ベストアンサー率33% (1/3)
上と同じ場合について説明します。 空いているセル(たとえばD列の1)に =IF(AND(MID(A2,1,1)="(", MID(A2,3,1)=")"),A1&A2,A1) をいれます。 次にD1のデータをオートフィルを使って必要な分だけコピーします。 すると下のように表示されると思います。 A列 B列 C列 D列 E列 F列 1 東京 千葉 北海道 東京 千葉 北海道 2 大阪 茨城 長野 大阪 茨城(青) 長野 3 名古屋 (青) 鹿児島 名古屋(赤) (青) 鹿児島 4 (赤) 三重 (不適当) (赤) 三重 (不適当) また、 =IF(AND(MID(A2,1,1)="(", MID(A2,3,1)=")"),A1&A2,A1) は 『A2の1文字目が「(」』かつ『3文字目が「)」の場合A1の後ろにA2をくっつけて表示 それ以外の場合はA1はA1(そのまま)表示』 と言う意味なので()内が2文字以上の場合は3文字目が「)」にはならなず ()内が2文字以上の時は削除できると思います。 補足ですが「()」は全角と半角で区別されるので注意して下さい。
お礼
ありがとうございました。解決しました。
- TTak
- ベストアンサー率52% (206/389)
長いですが、ワークシート関数だけでやるなら =IF(AND(LEN(B3)=3,LEFT(B3,1)="(",RIGHT(B3,1)=")")=TRUE,"",IF(AND(LEN(B4)=3,LEFT(B4,1)="(",RIGHT(B4,1)=")")=TRUE,B3&B4,IF(AND(LEN(B3)>3,LEFT(B3,1)="(",RIGHT(B3,1)=")")=TRUE,"",B3))) となりますかね。
- Ce_faci
- ベストアンサー率36% (46/127)
こんにちわ 別の場所に編集用の表を作るものとします。 2行目以降に =IF(ASC(RIGHT(A2,1))=")",A1 & A2,A2) で試してください
お礼
ありがとうございました。
- ham_kamo
- ベストアンサー率55% (659/1197)
マクロを作ってみました。 Alt+F11でVBAの画面を開き、左側のツリーからブック名を選択し、右クリックから「挿入」>「標準モジュール」を選択して、右の画面に以下のマクロをコピーして貼り付けてください。 Sub 括弧つき文字の結合() Dim R As Range For Each R In Range("A1").CurrentRegion If StrConv(R, vbNarrow) Like "(*)" Then If Len(R) = 3 And R.Row > 1 Then R.Offset(-1).Value = R.Offset(-1).Value & R.Value End If R.Value = "" End If Next End Sub その画面でF5キーを押すか、Alt+F11でExcelの画面に戻ってAlt+F8からマクロを実行してみてください。
お礼
ありがとうございました。できました!
お礼
ありがとうございました。解決しました。