パソコン困りごと相談掲示板
◇-Excelのマクロにおける欧文置換処理について-ゆき(4/29-15:34)No.2237
 ┗Re:Excelのマクロにおける欧文置換処理について-おやじ(4/29-18:26)No.2240
  ┗Re:Excelのマクロにおける欧文置換処理について-ゆき(4/30-00:11)No.2280
   ┗Re:Excelのマクロにおける欧文置換処理について-SARU(4/30-05:33)No.2288
    ┗Re:Excelのマクロにおける欧文置換処理について-ゆき(5/1-01:55)No.2320
     ┣出来た!-おやじ(5/1-09:53)No.2331
     ┃┗Re:出来た!-ゆき(5/2-00:39)No.2391
     ┃ ┗Re:出来た!-おやじ(5/2-09:35)No.2410
     ┗Re:Excelのマクロにおける欧文置換処理について-SARU(5/1-13:04)No.2335
      ┗補足..-SARU(5/1-13:46)No.2340
       ┗ありがとうございます-ゆき(5/2-00:34)No.2390

▲このページのトップに戻る
2237Excelのマクロにおける欧文置換処理についてゆき 4/29-15:34

OS名:Windows95
パソコン名:FMV
ソフト名:Excel97
Excel97のマクロについて質問があります

「ウムラオトのo」を「o4」のように置換するという作業を
したいのですが、Excel97の上で打ち込んだ欧文特殊文字を
置換する場合、どうすればいいのでしょうか?

欧文特殊文字をできればふつうの置換作業でなく、
マクロで作業を済ませたいのです。

よろしくお願いします。

▲このページのトップに戻る
2240Re:Excelのマクロにおける欧文置換処理についておやじ 4/29-18:26
記事番号2237へのコメント
ゆきさんは No.2237「Excelのマクロにおける欧文置換処理について」で書きまし
た。
>OS名:Windows95
>パソコン名:FMV
>ソフト名:Excel97
>Excel97のマクロについて質問があります
>
>「ウムラオトのo」を「o4」のように置換するという作業を
>したいのですが、Excel97の上で打ち込んだ欧文特殊文字を
>置換する場合、どうすればいいのでしょうか?
>
>欧文特殊文字をできればふつうの置換作業でなく、
>マクロで作業を済ませたいのです。

難しすぎて分からない。ドイツ語の文字ですか?
単純な文字の置き換えなら

Cells.Replace What:="$$", Replacement:="o4", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False

みたいな感じで出来るんでしょうが、a,u,o などのウムラオトって
どうやって表記するんだか?
バイナリ指定が出来れば可能かな?
詳しくないのでここまで。お役に立てません。

▲このページのトップに戻る
2280Re:Excelのマクロにおける欧文置換処理についてゆき 4/30-00:11
記事番号2240へのコメント
おやじさん どうもありがとうございます。

あまり一般的な作業ではないせいか、
見た範囲の書物では出ていなかったのでもしかして
わからないかなぁと期待して書き込みました。

>a,u,o などのウムラオトってどうやって表記するんだか?
たとえば、スタート→プログラム→アクセサリ→文字コード表
で、左Altとテンキーの0246で欧文フォントで入力は可能です。
その他、キーボードの設定変更など。

キーボードマクロで作業を覚えさせようとすると
ふつうの置換作業ではうまくいくものの、マクロで動かそうとすると
うまくいきません。マクロの編集で確認すると
ウムラオトが落ちた、ただのアルファベットになっています。

> Cells.Replace What:="$$", Replacement:="o4", LookAt:=xlPart, _
> SearchOrder:=xlByRows, MatchCase:=False

$$のところに、どういう文字コードをあてればいいのでしょうか?

>バイナリ指定が出来れば可能かな?
バイナリ指定の意味がよくわかりません。コンピュータ用語辞典を見たのですが
よくわかりませんでした。

もしも似た処理を行なったことのあるかたがいらっしゃったら、
よろしくお願いします。

▲このページのトップに戻る
2288Re:Excelのマクロにおける欧文置換処理についてSARU 4/30-05:33
記事番号2280へのコメント
>
>もしも似た処理を行なったことのあるかたがいらっしゃったら、
>よろしくお願いします。
ascw()とchrw()を使用してみては?

サンプルでセルA1の文字列を処理してセルB1
に表示するものを作ってみました。

helpでASCU文字セットを見て確認してください。
但し、以下の注意書きがありました。

>表の値は、Windows の既定値を示しています。ただし、
>文字コードの値が 127 より大きい文字については、ユーザー
>のオペレーティング システムが使用しているコード ページに
>よって文字が異なる場合があります。


(以下サンプル)※欧文文字の範囲は良く判らないのであくまでもサンプルです(^-^;
Public Sub test()
Dim i As Integer
Dim s_lng As Integer
Dim w_chr1, w_chr2 As String

s_lng = Len(Range("a1").Value)
w_chr1 = ""

If s_lng <> 0 Then
For i = 1 To s_lng
w_chr2 = Mid(Range("a1").Value, i, 1)
If AscW(w_chr2) >= 192 _
And AscW(w_chr2) <= 7923 Then
w_chr1 = w_chr1 & "[o_" & ChrW(AscW(w_chr2)) & _
"(" & AscW(w_chr2) & ")]"
Else
w_chr1 = w_chr1 & w_chr2
End If
Next i
End If

Range("b1").Value = w_chr1

End Sub

▲このページのトップに戻る
2320Re:Excelのマクロにおける欧文置換処理についてゆき 5/1-01:55
記事番号2288へのコメント
SARUさん どうもありがとうございます

Word95のマクロのイメージが強かったので、つい同じようなものと
思い込んでいました。
>ascw()とchrw()を使用してみては?
これが必要な関数にあたるわけですね。

>サンプルでセルA1の文字列を処理してセルB1
>に表示するものを作ってみました。
どうもありがとうございます。
作っていただいたマクロですが、

ウムラオトつきのaiueoを打って実験すると
[o_a(228)][o_i(239)][o_u(252)][o_e(235)][o_o(246)]
(それぞれのaiueoの上にはウムラオトがついた状態)
となりました。

Excelのマクロの見方が今一つわかっていないので、
この結果が何を意味するか理解できないのですが

ascw() chrw()にどの数字で文字コートをあてれば
いいのかわかれば、処理できそうな気もしてきたので
しばらく考えたいと思います。

どうもありがとうございます。


▲このページのトップに戻る
2331出来た!おやじ 5/1-09:53
記事番号2320へのコメント
置き換え対象文字を、マクロ内でなくシート内に持てば
可能です。
以下のように(シート名PのA1セルにオーウムラオトを置く)

Cells.Replace What:=Range("P!A1"), Replacement:="o4", LookAt:=xlPart,
_
SearchOrder:=xlByRows, MatchCase:=False

で、どや!
EXCEL97ではOKだった。

▲このページのトップに戻る
2391Re:出来た!ゆき 5/2-00:39
記事番号2331へのコメント
おやじさん ありがとうございます

やはりExcelのルールがわかっていません。
動作確認としてシートの名前を変更するのでしょうか?
とんちんかんなことをきいてしまい、すみません。
だいたいキーボードマクロをいじってそこそこ作業させるのが
ふつうなので、一から組んだことがないものですから。

>Cells.Replace What:=Range("P!A1"), Replacement:="o4", LookAt:=xlPart,
>_
>SearchOrder:=xlByRows, MatchCase:=False


▲このページのトップに戻る
2410Re:出来た!おやじ 5/2-09:35
記事番号2391へのコメント
ゆきさんは No.2391「Re:出来た!」で書きました。
>動作確認としてシートの名前を変更するのでしょうか?
>とんちんかんなことをきいてしまい、すみません。
>だいたいキーボードマクロをいじってそこそこ作業させるのが
>ふつうなので、一から組んだことがないものですから。
>
>>Cells.Replace What:=Range("P!A1"), Replacement:="o4", LookAt:=xlPart,
>>_
>>SearchOrder:=xlByRows, MatchCase:=False

私もキーボードマクロ専門です。VBは知りません。
キーボードマクロで作成された、What:="o", を

What:=Range("シート名!セル名"), に変えただけですので
シート名は好みでよいのです。
シート名が Sheet5なら  What:=Range("Sheet5!A1"), になります。

変換したい文字がたくさんあるなら、A1,A2,A3にどんどん入れて
マクロも行コピーして増やせばよいです。

また、同様に変換後の文字もシート内で指定出来ます。
セルのB1に入れたとすると、
Replacement:=Range("P!B1"), にすればOKです。

後は、出来たマクロをコマンドボタンにくっ付けるだけですね。

▲このページのトップに戻る
2335Re:Excelのマクロにおける欧文置換処理についてSARU 5/1-13:04
記事番号2320へのコメント
>ウムラオトつきのaiueoを打って実験すると
>[o_a(228)][o_i(239)][o_u(252)][o_e(235)][o_o(246)]
>(それぞれのaiueoの上にはウムラオトがついた状態)
>となりました。
>
>Excelのマクロの見方が今一つわかっていないので、
>この結果が何を意味するか理解できないのですが
>

マクロを使用とあったので、VBの基礎くらいは
判っているものと思っていました。

>[o_a(228)][o_i(239)][o_u(252)][o_e(235)][o_o(246)]
はウムラオト文字と文字コードの関係が合っているかを確認して
頂くためにそのように表示してみました。
※合っていますよね?

動作としてはウムラオトと他の文字が混在している場合、
他の文字はそのままでウムラオトのみ加工すると言うことです。

ウムラオトのaからzまで個々に別の数値を割り当てるなら
以下のサンプルを試してみて下さい。
(選択したセルから隣のセルへ編集結果を出力し、1段づつ
 下へ移動してセルに値が無くなるまで繰り返します)

===================================
Public Sub test3()

Dim i As Integer '文字位置カウンタ
Dim j As Double 'セル位置カウンタ
Dim s_lng As Integer 'セル内の文字数
Dim w_chr1, w_chr2 As String '文字列編集用ワーク

j = 0 '置き換え開始セル位置初期化

'開始位置から下方向へセルに値が無くなるまで繰り返し
Do Until ActiveCell.Offset(j, 0).Value = ""

s_lng = Len(ActiveCell.Offset(j, 0).Value) '選択セルの文字数取得
w_chr1 = "" '編集用ワークの初期化

For i = 1 To s_lng 'iが1から文字数分だけ繰り返す
  'セル内文字列のi番目1文字を取り出す
w_chr2 = Mid(ActiveCell.Offset(j, 0).Value, i, 1)
'取り出した文字のコードが192以上7933以下の場合
If AscW(w_chr2) >= 192 _
And AscW(w_chr2) <= 7923 Then
'真なら文字置き換えの処理(文字コード192からO1とする)
w_chr1 = w_chr1 & "o" & AscW(w_chr2) - 191
Else
'為なら文字列ワークへそのまま文字を連結
w_chr1 = w_chr1 & w_chr2
End If
Next i '繰り返し終了
'隣のセルへ置き換え結果を出力
ActiveCell.Offset(j, 1).Value = w_chr1
'セルを置き換えたければ1を0に変更
j = j + 1 '置き換え対象セルを下の段へ

Loop


End Sub
=====================================

▲このページのトップに戻る
2340補足..SARU 5/1-13:46
記事番号2335へのコメント
ウムラオトのaシリーズをa1〜、oシリーズをo1とかってするのなら

文字置き換え部を全てのウムラオトの文字コードに対して

>w_chr1 = w_chr1 & "o" & AscW(w_chr2) - 191

の部分を

    Select Case AscW(w_chr2)
      Case 192
       w_chr1 = w_chr1 & "A1"
      Case 193
       w_chr1 = w_chr1 & "A2"
       ・
       ・
       ・
      Case 215
       w_chr1 = w_chr1 & "o1"
       ・
       ・
       ・
    End Select

とかにするしかないかも。

▲このページのトップに戻る
2390ありがとうございますゆき 5/2-00:34
記事番号2340へのコメント
SARUさん ありがとうございます
解説していただき、わかりました。

やはりWordBasicとは違っていて、甘く考えていたことが
わかりました。

具体的に一つずつ見ていった方が入力ミスも確認できるので
長くなっても後で教えていただいた分で作業を進めたいと
思います。

ありがとうございます