◇-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
2237 | Excelのマクロにおける欧文置換処理について | ゆき | 4/29-15:34 |
OS名:Windows95 パソコン名:FMV ソフト名:Excel97 Excel97のマクロについて質問があります 「ウムラオトのo」を「o4」のように置換するという作業を したいのですが、Excel97の上で打ち込んだ欧文特殊文字を 置換する場合、どうすればいいのでしょうか? 欧文特殊文字をできればふつうの置換作業でなく、 マクロで作業を済ませたいのです。 よろしくお願いします。 |
2240 | Re: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 などのウムラオトって どうやって表記するんだか? バイナリ指定が出来れば可能かな? 詳しくないのでここまで。お役に立てません。 |
2280 | Re:Excelのマクロにおける欧文置換処理について | ゆき | 4/30-00:11 |
記事番号2240へのコメント おやじさん どうもありがとうございます。 あまり一般的な作業ではないせいか、 見た範囲の書物では出ていなかったのでもしかして わからないかなぁと期待して書き込みました。 >a,u,o などのウムラオトってどうやって表記するんだか? たとえば、スタート→プログラム→アクセサリ→文字コード表 で、左Altとテンキーの0246で欧文フォントで入力は可能です。 その他、キーボードの設定変更など。 キーボードマクロで作業を覚えさせようとすると ふつうの置換作業ではうまくいくものの、マクロで動かそうとすると うまくいきません。マクロの編集で確認すると ウムラオトが落ちた、ただのアルファベットになっています。 > Cells.Replace What:="$$", Replacement:="o4", LookAt:=xlPart, _ > SearchOrder:=xlByRows, MatchCase:=False $$のところに、どういう文字コードをあてればいいのでしょうか? >バイナリ指定が出来れば可能かな? バイナリ指定の意味がよくわかりません。コンピュータ用語辞典を見たのですが よくわかりませんでした。 もしも似た処理を行なったことのあるかたがいらっしゃったら、 よろしくお願いします。 |
2288 | Re: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 |
2320 | Re: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だった。 |
2391 | Re:出来た! | ゆき | 5/2-00:39 |
記事番号2331へのコメント おやじさん ありがとうございます やはりExcelのルールがわかっていません。 動作確認としてシートの名前を変更するのでしょうか? とんちんかんなことをきいてしまい、すみません。 だいたいキーボードマクロをいじってそこそこ作業させるのが ふつうなので、一から組んだことがないものですから。 >Cells.Replace What:=Range("P!A1"), Replacement:="o4", LookAt:=xlPart, >_ >SearchOrder:=xlByRows, MatchCase:=False |
2410 | Re:出来た! | おやじ | 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です。 後は、出来たマクロをコマンドボタンにくっ付けるだけですね。 |
2335 | Re: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とは違っていて、甘く考えていたことが わかりました。 具体的に一つずつ見ていった方が入力ミスも確認できるので 長くなっても後で教えていただいた分で作業を進めたいと 思います。 ありがとうございます |