長い文字列の中身を特定の規則に則って入れ替えたい
ダメ元で質問させて頂きます。
1セル中の文字列を…例えば、長い文字列の中、4文字ずつの組で前2文字後ろ2文字をExcel関数を使って全て入れ替える方法はあるでしょうか?
文字数は、必ず8の倍数になり、使用する文字は0〜9とA〜Fのみです。
具体的には下記の様にしたいです。
0123456789ABCDEF……
↓
23016745AB89EFCD……
シートの構造上、無駄なセルを増やしたくないため、できれば1セルでスパッと済ませたいです。無理なら、作業セルが1〜2個あっても良いと考えております。
Excel2016でも使用できることを想定していますが、新しいバージョンなら可能という手があれば、そちらも教えて頂きたいです。
宜しくお願い致します。
No.4ベストアンサー
- 回答日時:
こんばんは
No2様のユーザー定義関数による方法がよいと思いますが、無理矢理に関数で行う方法を考えてみました。
元の文字列は4の倍数であると決め打ちですが、A1セルに元の文字列があるとして、TEXTJOIN関数が使える環境であることが条件です。
例えばA2セルに
=TEXTJOIN("",1,INDEX(MID(A1,ROW(OFFSET(A1,,,INT(LEN(A1)/4)))*4-1,2) & MID($A$1,ROW(OFFSET(A1,,,INT(LEN(A1)/4)))*4-3,2),))
とかではいかがでしょうか?
最近の回答を拝見しています。
実は質問せずにvbaで解決するつもりでいたのですが、No.4さんならもしかしたら…との期待でダメ元で質問させて頂きました。
No.2さんの方法が一番スッキリしそうだと思いますが、既存の関数でできるならその方が楽ですよね。
手元の365環境を使って簡単な文字列で試したところ、うまく動いてくれました!
TEXTJOINは2016でも使えるようなので、月曜日に会社で試してみようと思います。
取り敢えずはこの式の解読から始めます…。
有り難うございました。
No.3
- 回答日時:
> シートの構造上、無駄なセルを増やしたくないため、できれば1セルでスパッと済ませたいです。
無理なら、作業セルが1〜2個あっても良いと考えております。目的のシートというか対象のシートというのか、そのシート("Sheet3")とは別に作業用シート("Sheet3s")をつくってやれば、("Sheet3s")の目的の文字列のあるセルを、("Sheet3")の1つのセル参照させれば、「求める文字列」を表示させる1つのセルだけを使ったことになると思いますが、それでは具合が悪いのでしょうか。
、"Sheet3s"のA列に4文字づつを縦に並べ、B列にA列の4文字を(後2文字&前文字)としたものを出し、C列にB列の4文字をただ後ろに繋げた文字列を造ると、C列の最終行には、目的の文字列ができます。
回答有り難うございます。
力技でやろうとすると、かなりの領域を使用してしまうため、シートが重くなってしまうことを懸念しております。
個人的の趣味にもなってしまうのですが、綺麗に纏めたいというのもありまして…。
バイナリ形式のファイルをマクロで読み込んで、特定の条件を指定してシート1に16進で出力します。
最大で4000文字程度のデータが数千件…恐ろしく重くなるので通常は十数件程度になるように抽出範囲を絞りますが、それでもかなりの量になります。
シート2〜4には抽出したデータを分解、解釈するための関数や定義が詰まっており、無駄な領域を増やしたくないという事情もあります。
No.2
- 回答日時:
こんばんは、800文字とかあるのでしょうか?
関数よくわからないのですが、16文字程度ならべたで、、
=CONCATENATE(MID(A1, 3, 2),MID(A1, 1, 2),MID(A1, 7, 2),MID(A1, 5, 2),MID(A1, 11, 2),MID(A1, 9, 2),MID(A1, 15, 2),MID(A1, 13, 2))
800とかあるなら、、関数で出来るのかな?
私には無理なので、好みはありますが、ユーザー関数を作った方が早いかと
Public Function ch_swap3412(strVal As String)
Dim i As Long, buf As String
For i = 1 To Len(strVal) Step 4
If buf = "" Then
buf = Mid(strVal, i + 2, 2) & Mid(strVal, i, 2)
Else
buf = buf & Mid(strVal, i + 2, 2) & Mid(strVal, i, 2)
End If
Next
ch_swap3412 = buf
End Function
セルに =ch_swap3412(A1)
文字数は最大4000文字程度になります。
ユーザー関数ですか。
聞いた事はありましたが、使った事はありませんでした。
マクロの関数と同じように書けるのですね。
ユーザー関数を使えば解決できそうです。
有り難うございます!
No.1
- 回答日時:
Excelだと、長い文字列の処理を関数のみでするのはマクロでないと
無理だと思う。
4文字ごとに作業セルに区切るなら関数での処理も可能ですが、8の
倍数といっても、どの程度の文字数なのかで処理するセル数の増減
があるため、作業セルが1~2個では済まないためです。
正規表現が使えるテキストエディタや、Wordなどを使って処理をする
なら簡単に処理できるものですから、別手段を検討されてはいかが。
※ 正規表現の例(Wordの場合は[ワイルドカード]使用のこと)
[検索する文字列]に
([0-9A-F]{2})([0-9A-F]{2})
[置換後の文字]に
\2\1
エディタってそんな置換も出来るのですか…。
今回、Excelの関数で出来ればラッキーだと思っております。
バイナリ形式のファイルから特定のデータを抽出して、見つかったデータを特定の列にその数分だけ上から順に16進でセットするシートがありまして…。
新しい形式のデータを解析するのに、質問文の並びにできれば既存の仕組みをそのまま使えるもので。
最近は知らない高度な関数も結構あるようなので、関数でサクッと出来れば…と考えた次第です…。
無理そうならマクロでなんとかしようと思います。
エディタの件、秀丸なら出来そうですよね。
今後のためにもかなり役に立ちそうなので、勉強させていただこうと思います。
有り難うございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) EXCEL VBA 単語置き換え について質問です ブック名 ぶぶぶ シート名 ししし セル V3〜 3 2023/03/08 01:41
- Excel(エクセル) Excelの文字列を数字に変換する方法について 6 2023/07/31 21:18
- Excel(エクセル) エクセルの条件付き書式で*を使いたい 4 2022/05/13 16:49
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/02/10 11:41
- Excel(エクセル) Excelの入力規則にいれる関数について 7 2022/12/22 10:19
- Excel(エクセル) エクセルの書式設定の表示形式で設定した文字を文字列としてコピーしたい 1 2022/12/21 10:41
- その他(Microsoft Office) Excelの条件付き書式についての質問です。 2 2022/09/08 01:25
- Excel(エクセル) Excelの空文字判定について 7 2023/01/06 13:25
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
- Visual Basic(VBA) 指定した文字から指定した文字のスペースまでを削除するVBAの構文について 6 2022/07/24 22:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでの作業計算方法について
-
はがきについて。
-
エクセル 文字を増やしたい。
-
セルの内容表示が邪魔になる
-
Microsoft365に変えたのですが...
-
エクセルの計算
-
Microsoft1Officeの互換ソフト...
-
【マクロ】その時、その時で変...
-
【マクロ】読取専用のファイル...
-
エクセル初心者です 関数の入れ...
-
Excel ピボットテーブルで日付...
-
【関数】適切な文字数の数字を...
-
LOOKUP関数を使えばいいのでし...
-
Aというブックの1というシート...
-
エクセル関数を教えてください
-
Excelのチェックボックスの使い...
-
エクセル 白黒印刷で白線を印刷...
-
時間によってファイル名が変わ...
-
WPS OFFICEでの縦書きについて
-
エクセルの条件付き書式につい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 2019 のピボットテーブル...
-
[関数得意な方]教えて下さい・...
-
Excelにてある膨大なデータを管...
-
[関数について]わかる方教えて...
-
Excel初心者です。 詳しい方、...
-
excelの不要な行の削除ができな...
-
エクセル関数に詳しい方教えて...
-
INDIRECTを使わず excelで複数...
-
[オートフィルタ]で抽出された...
-
エクセルの神よ、ご回答を! エ...
-
エクセル関数に詳しい方、教え...
-
各ページの1番上の表示について
-
Excelで写真のような表を作った...
-
エクセルで不等号記号(≠)が上に...
-
数学 Tan(θ)-1/Cos(θ)について...
-
Excel 2019 は、SPILL機能があ...
-
Excelで全角を半角にしたいので...
-
条件付き書式を教えてください
-
Excel フィルターを掛けた状態...
-
[オートフィルタ]の適用範囲の...
おすすめ情報
皆様有難うございました。
思いのほか回答を頂き、Excelの中でも自分が一部の機能しか使用していないのだなと改めて気付かされました。
また、エディタについてのテクニックについて知ることができ、思わぬ収穫になりました。
誠に恐縮ではありますが、当初の希望である関数での解決策を示して下さったNo.4さんをベストアンサーに選ばせて頂きます。