アプリ版:「スタンプのみでお礼する」機能のリリースについて

Excelのセル内文字の並び替えについて質問があります。

セル内に名前のデータがカンマで区切られて入ってくるのですが、順番を変えたいのですが、どのような数式を使えばいいかご教示いただけませんか?

A1のデータをB1に変更できる数式はありますか?
A1=Last Name,First Name,Title 
B1=Title First Name Last Name

※A1ではLast Name First Name Titleの間にはカンマ(,)がありそれぞれの間にスペースはありません。
※B1では、可能であればそれぞれの間にスペースを入れたいです。

(例)
A1=Nihon,Hanako,Ms.
B1=Ms. Hanako Nihon

複数の処理するので、できれば数式をコピーしただけで出来るようにしたいのですが、どなたか教えてくださいませんか?

宜しくお願い致します。

A 回答 (6件)

こんばんは!



手っ取り早くVBAでの一例です。
データはA列1行目からあるとします。

Sub Sample1()
 Dim i As Long, k As Long
 Dim myStr As String, myAry
  For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
   myAry = Split(Cells(i, "A"), ",")
    For k = UBound(myAry) To 0 Step -1
     myStr = myStr & myAry(k) & " "
    Next k
   Cells(i, "B") = myStr
   myStr = ""
 Next i
End Sub

※ 関数で出来るかどうか判りませんが、
考える気力がないのでVBAにしてみました。

どうしても関数でやりたい!という場合は、この質問限定の関数(ユーザー定義関数)を作成すれば
通常のワークシート関数と同じ使い方ができます。m(_ _)m
    • good
    • 0
この回答へのお礼

質問からすぐに回答をいただき、ありがとうございました。
昨晩お礼を書いたのが、うまく反映されておらずすみません。
こちらのVBAで出来ました。本当にありがとうございます。

お礼日時:2018/11/06 21:23

こんばんは。



補助列を用意します。
ここでは、C~Eまでです。

A1 :Nihon,Hanako,Ms.

B1:=C1&" "&D1&" "&E1
================

C1
=MID(A1,FIND("!",SUBSTITUTE(A1,",","!",2))+1,20)
D1:
=SUBSTITUTE(MID(A1,FIND("!",SUBSTITUTE(A1,",","!",1))+1,20),","&C1,"")
E1:
=SUBSTITUTE(A1,","&D1&","&C1,"")

------------
VBAの正規表現を使った場合
'//標準モジュールに登録

Public Function ReOrderName(ByVal oName)
Dim RegEx As Object
Dim Ms
Dim buf As String
Set RegEx = CreateObject("VBScript.RegExp")
With RegEx
 '.Global = True: .IgnoreCase = False: .MultiLine = True
 .Pattern = "(\w+),(\w+),([\w\.]+)"
 Set Ms = .Execute(oName)
 With Ms(0)
  buf = .subMatches(2) & " " & .subMatches(1) & " " & .subMatches(0)
 End With
End With
ReOrderName = buf
End Function

ワークシートでは、以下のように普通の関数と同じようにします。
=ReOrderName(A1)
    • good
    • 0
この回答へのお礼

遅い時間にも関わらず、回答いただきありがとうございました。
教えていただいた関数でうまく出せました。
VBAの方は、まだ標準モジュールに登録できてないので、また明日トライしてみます!
ありがとうございました。

お礼日時:2018/11/06 21:55

[No.3]用の添付図です。

「Excelのセル内文字の並び替えについて」の回答画像5
    • good
    • 0
この回答へのお礼

ご親切に画像もつけていただき感謝です!非常にわかりやすく一目で分かり、助かりました。

お礼日時:2018/11/06 21:27

簡単にできる方法(おそらく)を紹介します。



変換前のデータはA列(A1~Axxセル)にあり、カンマで区切られた文字列は3個であり、B列以降は空白であるとします。
◆手順
1.A列を選択
2.メニュー → データ → 区切り位置
3.『カンマやタブなどの区切り文字に・・・』を選択して『次へ』をクリック
4.『カンマ』のみにチェックを入れて『完了』をクリック
5.D1セルに『=concatenate(C1," ",B1," ",A1)』と入力する
6.手順5で入力した式を下方向のデータ最下行までコピペ
7.完成

PS
・『区切り位置』はコンマ等の文字で区切られた文字列を分離する機能です。B列、C列にデータがあった場合、分離された文字列で上書きされます。
・手順5はD1セルである必要は特にありません。適切な場所においてください。
・concatenateは文字列を結合する関数です。ここでは分離した文字列をスペースを結合しています。
    • good
    • 0
この回答へのお礼

昨晩は回答をいただいたのに気が付きませんでしたが、遅い時間に回答をいただきありがとうございます。
こちらでもできました。
また、PSで区切り位置やconcatenateのご説明をいただき大変助かりました。
今まで使ったことのない関数でしたので、勉強になりました。今後活用させていただきます。
ありがとうございました。

お礼日時:2018/11/06 21:26

1.「セル内に名前のデータがカンマで区切られて入ってくる」データを


 ̄ ̄Sheet2 に読み込む
2.[データ] ⇒ [区切り位置] で列A、B、C に分ける
3.Sheet1 において、
 ̄ ̄次式 を入力したセル A1 を下方にズズーッとオートフィル
 ̄ ̄ =INDEX(Sheet2!A1:C1,3)&" "&INDEX(Sheet2!A1:C1,2)&" "&INDEX(Sheet2!A1:C1,1)&""

私、何か勘違いしてますか?
    • good
    • 0
この回答へのお礼

遅い時間に回答をしてくださり、ありがとうございます。
こちらでも望み通りの結果を得ることができ大変助かりました。
区切り位置やINDEXを知らなかったので、大変勉強になりました。
ありがとうございます。

お礼日時:2018/11/06 21:26

文字列を3つに分けて、1つ目と3つ目の位置を入れ替えたい。


ということですか?

FIND関数やSEARCH関数でカンマの位置を調べれば、各位置の文字の長さは分かりますよね。
あとは…
MID関数で元の文字列から3つ目を切り抜いて、MID関数で真ん中を切り抜いて、MID関数で1つ目を切り抜いて、
この順に繋げばOK。
そんだけです。

この手順の中で何が分かりませんか?
数式だけ示して欲しいということですが、意味が分からないと同様の問題に遭遇した時にまた悩むことになりますよ。
「急いでいる」ということですので、他人に聞くなんてまどろっこしいことしないで自分で解決できるようにすべきです。
分からない点について質問されれば詳しく教えます。
返答お待ちしてます。
    • good
    • 0
この回答へのお礼

早々に回答いただきありがとうございます。
関数初心者で、どの関数を使えばできるのかさえ分からなかったので、大変参考になりました。

教えていただいた関数で先ほどから試しているのですがまだうまくできないので、明日再度試してみます。

お礼日時:2018/11/06 00:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A