エクセルについての質問です。指定範囲内の氏名を姓名反転する方法、マクロを教えて下さい。姓名は『,(半角カンマ+ (半角スペース)』で区切られています。(例)山田, 太郎


基本的に1セル、1人です。また日本語名、英語名(ローマ字)混在しています。
特に日本語名だけ反転、英語名だけ反転、両方反転する方法をお願いします。

回答の条件
  • 1人2回まで
  • 登録:2009/01/23 01:18:19
  • 終了:2009/01/25 20:19:03

ベストアンサー

id:rome0315 No.3

rome0315回答回数13ベストアンサー獲得回数32009/01/25 19:50:59

ポイント48pt

空白セルを考慮していませんでした。

姓名反転()内のFor Each以降の行を下記のように変更して下さい。

「If name <> "" Then」「End If」で空白セルを飛ばして処理します。


For Each name In Selection

If name <> "" Then

If flg = 0 Then

反転 name

Else

result = アルファベットチェック(name.Value)

If flg = 2 And result = True Then

反転 name

ElseIf flg = 1 And result = False Then

反転 name

End If

End If

End If

Next

id:WATANABE

ありがとうございます、希望通りの事が出来ました。

2009/01/25 20:18:14

その他の回答(2件)

id:hiko3karasu No.1

hiko3karasu回答回数1058ベストアンサー獲得回数252009/01/23 02:07:21

ポイント20pt

関数でもいいでしょうか?

A1にデータがあるとして

 

全部変えるときは

B1に

=MID(A1,FIND(", ",A1)+2,100)&", "&LEFT(A1,FIND(", ",A1)-1)

 

英語だけ変えるときは

B1に

=IF((LEFT(A1,1)>="a")*AND(LEFT(A1,1)<="Z"),MID(A1,FIND(", ",A1)+2,100)&", "&LEFT(A1,FIND(", ",A1)-1),A1)

 

英語以外を変えるときは

=IF((LEFT(A1,1)>="a")*AND(LEFT(A1,1)<="Z"),A1,MID(A1,FIND(", ",A1)+2,100)&", "&LEFT(A1,FIND(", ",A1)-1))

id:WATANABE

ありがとうございます、参考になります。

2009/01/25 00:13:07
id:rome0315 No.2

rome0315回答回数13ベストアンサー獲得回数32009/01/24 18:14:25

ポイント32pt

両方か、日本語だけか、英語だけかによって、

flgの値を変えてください。

英語(ローマ字)かどうかの判定は先頭の文字がA-zで判定しています。

全角の英字が入力されている場合は、正しく判定できません。

Option Explicit

Sub 姓名反転()

Dim flg As Integer

Dim name As Range

Dim result As Boolean

flg = 0 '両方変換

' flg = 1 '日本語名だけ変換

' flg = 2 '英語名だけ変換

For Each name In Selection

If flg = 0 Then

反転 name

Else

result = アルファベットチェック(name.Value)

If flg = 2 And result = True Then

反転 name

ElseIf flg = 1 And result = False Then

反転 name

End If

End If

Next

End Sub

Sub 反転(data As Range)

Dim buf As Variant

Dim delimiter As String

delimiter = ", "

buf = Split(data, delimiter)

data.Value = buf(1) + delimiter + buf(0)

End Sub

Function アルファベットチェック(data As String) As Boolean

Dim topword As Integer

topword = Asc(Left(data, 1))

If topword >= Asc("A") And topword <= Asc("z") Then

アルファベットチェック = True

Else

アルファベットチェック = False

End If

End Function

id:WATANABE

ありがとうございます。ただ空白セルがあるとそれ以降がうまく反転しないので何とかなりませんか?

2009/01/25 00:12:44
id:rome0315 No.3

rome0315回答回数13ベストアンサー獲得回数32009/01/25 19:50:59ここでベストアンサー

ポイント48pt

空白セルを考慮していませんでした。

姓名反転()内のFor Each以降の行を下記のように変更して下さい。

「If name <> "" Then」「End If」で空白セルを飛ばして処理します。


For Each name In Selection

If name <> "" Then

If flg = 0 Then

反転 name

Else

result = アルファベットチェック(name.Value)

If flg = 2 And result = True Then

反転 name

ElseIf flg = 1 And result = False Then

反転 name

End If

End If

End If

Next

id:WATANABE

ありがとうございます、希望通りの事が出来ました。

2009/01/25 20:18:14

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません