こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

「""」内にある空白に「_」アンダーバーを挿入

Excel2010での関数の質問です。

│ │ │ │ └─"ABC DE"  ←元データ

│ │ │ │ └─"ABC_DE"  ←完成形

「""」内にある半角の空白に「_」アンダーバーを
関数を使って挿入させたいと考えています。
(「""」内の文字は一意ではありません。)

=SUBSTITUTE(A11," ","_")
を使用したら、全ての空白に「_」アンダーバーが
挿入されてしまい、

│__│__│__│__└─"ABC_DE"

になってしまい、「|」の間にも「_」アンダーバーが
挿入されてしまいます。
(「|」と「|」の間は、半角空白が2つ入っています。)

括弧内の文字を抽出なら質問箱に沢山あるのを
確認していますが、括弧内の文字だけを変更は
見当たりませんでした。

「""」内にある半角の空白に「_」アンダーバーを
挿入させる関数をご教授下さい。
よろしくお願いします。

投稿日時 - 2017-09-15 05:58:55

QNo.9374710

すぐに回答ほしいです

質問者が選んだベストアンサー

関数のみでやってみました。
B11 =FIND("""",A11)
C11 =FIND("""",A11,B11+1)
D11 =MID(A11,B11+1,C11-B11-1)
E11 =LEFT(A11,B11)&SUBSTITUTE(D11," ","_")&MID(A11,C11,100)
でE11 に結果が入ります。

これを1つの関数にすると、
=LEFT(A11,FIND("""",A11))&SUBSTITUTE(MID(A11,FIND("""",A11)+1,FIND("""",A11,FIND("""",A11)+1)-FIND("""",A11)-1)," ","_")&MID(A11,FIND("""",A11,FIND("""",A11)+1),100)
とやたら長くなります。メンテナンスが大変なので、私ならやりません。

両方とも、""で囲まれたのが1か所だけ、2か所目以降は無視されます。
2か所以上あるなら、VBA を使わないと無理です。

注意:最後の100 は100 文字あれば大丈夫だろうという想像です。文字列が長い場合、最後まで表示されないこともあります。その場合、数字を増やしてください。

投稿日時 - 2017-09-15 07:32:54

補足

意図した回答になったので、
こちらの回答をベストアンサーとさせて頂きます。
ありがとうございました。

投稿日時 - 2017-09-18 22:11:31

お礼

SI299792様。
回答ありがとうございました。
セルのそれぞれに結果を入れるとどう言う動きをするのかが分かり
大変勉強になりました。
関数1つなら理解出来るのですが、ネストになるとお手上げで。
ネストの考え方を勉強する必要があると感じました。
確かに、関数としては「やたら長い」ですが、意図した回答になり
大変満足しています。
ありがとうございました。

投稿日時 - 2017-09-18 22:06:55

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

【Excel関数版】"|_"を元に戻す
=SUBSTITUTE(SUBSTITUTE(A1, " ","_"), "|_", "| ")

 朝に同じ式を書いて数度テストしたのですが首尾良い結果を得られませんでした。そこで、CutStr()を使ってみました。で、夜にもう一度アタック。で、成功。CutStr()よりこっちですね。

投稿日時 - 2017-09-15 21:18:03

お礼

f_a_007様。
3回の回答ありがとうございました。
私の書き方がダメなのか、意図した回答を得る事が出来ませんでした。
何度も回答して下さったのに、ごめんなさい。
ありがとうございました。

投稿日時 - 2017-09-18 22:10:09

ANo.4

=SUBSTITUTE(A1," ","_",1)
をB1に入れる。
A1セルのデータ例 asd fghj (fの前に半角スペース)-->B1の結果 asd_fghj
元データはA1セル。関数式は別セルに入れる(常識)、例B1。
最後の引数の1は、1番目に見つかったものを対象にする。
ーー
2,3番目も可能。その際は同じ関数でネストする。
例 =SUBSTITUTE(SUBSTITUTE(A2," ","_",1)," ","_",1)
他に置き換えた結果を対象にするので第4引数は1でよい。
A2データ例 asd f ghj (fの前後に半角スペース) ー-> asd_f_ghj

投稿日時 - 2017-09-15 11:24:13

お礼

imogasi様。
回答ありがとうございました。
試してみた所、
│__│__│__│__└─"ABC_DE"
と、なってしまい意図した結果が得れませんでした。
折角、回答下さったのに私の理解不足だと思います。
ごめんなさい。ありがとうございました。

投稿日時 - 2017-09-18 22:02:06

ANo.2

【訂正】
=CutStr(A1, """", 1) & """" & SUBSTITUTE(CutStr(A1, """", 2), " ", "_") & """"

左右を合成する際の 《& """"》の位置が間違っていました。

投稿日時 - 2017-09-15 07:25:02

ANo.1

 Excel は操作経験のない70歳になる爺ですので考え方だけ・・・

 添付図の式は、次のようです。

=CutStr(A1, """", 1) & """" & SUBSTITUTE(CutStr(A1, """", 2) & """", " ", "_")

式では、

1、ダブルクォーテーションの左側と右側に分割。
2、ダブルクォーテーションの右側のみ置換。
3、左側と右側を合成。

しています。

 私は、ダブルクォーテーションの左側と右側に分割するのに以下のCutStr()を利用しています。そこをExcelの関数で行えばOKなんではないでしょうか・・・

Public Function CutStr(ByVal Text As String, _
            ByVal Separator As String, _
            ByVal N As Integer) As String
  Dim strDatas() As String
  
  strDatas = Split("" & Separator & Text, Separator, , 0)
  CutStr = strDatas(N * Abs(N <= UBound(strDatas)))
End Function

投稿日時 - 2017-09-15 06:41:56

お礼

f_a_007様

早々の回答ありがとうございます。

まだ始業前でデスクに付けないので、
始業後試してみます。

ありがとうございました。

投稿日時 - 2017-09-15 07:02:49

あなたにオススメの質問