- ベストアンサー
Excel VBA 漢数字を半角算用数字に変換
cj_moverの回答
- cj_mover
- ベストアンサー率76% (292/381)
こんにちは。お邪魔します。 (#No.1補足欄を参考にさせて頂きます。) サブルーチンにして書きました。 書式: Sub MotiGomaPrintA(ByVal Source As String, ByVal Destination As Range, _ Optional ByVal ToRight As Boolean, _ Optional ByVal Delimiter As String = " ") Source には > sheet1のセルには、"先手の持駒:角二 金四 銀四 桂二 香三 歩十五"のように入ります。"角"以下が変動します。 "先手の持駒:角二 金四 銀四 桂二 香三 歩十五"のような文字列を指定します。 Destination には > これをsheet2のセル1に「角2」、セル2に「金4」のように切り分けます。 (セル2はセル1の下なのか右なのかわかりませんが) この場合の'セル1'、出力先の先頭セルを指すRange型オブジェクトを指定します、 ToRight は 省略するかFalseを指定すると、縦方向、 Trueを指定すると、横方向、 に、持駒を(最大7セル)列挙して出力します。 Delimiter には 各持駒の間にある区切り文字を指定します。 省略した場合は、全角|半角スペースが区切り文字となります。 ※ "先手の持駒:"の部分、タイトルには、最後の文字として 全角|半角コロン[":"|":"]が使われていることが条件です。 例示(Re8148829サンプル)は F1セルにある持駒テキストを F2から下(最大7セル)に 持駒ごとに切り分けた内容を半角数字に置換して出力する例です。 各パラメーターの指定は実用に合わせて調整してください。 複数セルを対象にする場合は Source、Destination、共にループさせる必要があります。 ' ' ============================== Sub Re8148829サンプル() Call MotiGomaPrintA(Range("F1").Value, Range("F2")) End Sub Sub MotiGomaPrintA(ByVal Source As String, ByVal Destination As Range, _ Optional ByVal ToRight As Boolean, _ Optional ByVal Delimiter As String = " ") Const 漢数字 = "一二三四五六七八九十" Dim arrS Dim sTmp As String Dim nUB As Long, nBuf As Long, nNum As Long Dim i As Long, nPos As Long Source = StrConv(Source, vbNarrow) Source = Mid$(Source, InStr(Source, ":") + 1) If Source = "" Then Exit Sub arrS = Split(Source, Delimiter) nUB = UBound(arrS) For i = 0 To nUB sTmp = arrS(i) If InStr(漢数字, Mid$(sTmp, 2, 1)) Then ' ● nBuf = 0& For nPos = 2& To Len(sTmp) nNum = InStr(漢数字, Mid$(sTmp, nPos, 1)) ' ▲ If nNum Then nBuf = nBuf + nNum Next nPos If nBuf Then arrS(i) = Left$(sTmp, 1) & nBuf End If Next i With Destination If ToRight Then .Resize(1, 7).Value = Empty .Resize(1, nUB + 1).Value = arrS Else .Resize(7, 1).Value = Empty .Resize(nUB + 1, 1).Value = Application.Transpose(arrS) End If End With End Sub ' ' ============================== もし、自作で乗り切りたいということでしたら、 コードまるごと見せてもらった方が話が早いです。 ただ、 各駒ごと、2文字めに漢数字があるならば、、、(●で示した所) という条件分岐や、 一文字ずつ見ていって"一二三四五六七八九十"の中の 何番目にあるか、で数値化している処理、、、(▲で示した所) など、部分的には参考になるかも知れません。 こちらの理解が至っていない気もするので、 もし違っていたら補足ください。 とりあえず、以上です。
関連するQ&A
- 算用数字(半角)から漢数字への変換(エクセル2000)
ワード2000で差し込み印刷をしたいと思っています。 しかし、2000ではエクセルから住所録を読み込む場合、 算用数字を読み込むと横で表示されてしまいます。 そこでエクセル2000で算用数字を漢数字に変換しなければなりません。 算用数字を漢数字に変換するのに簡単な方法はないですか? 私が考えている方法は、1~9の数字を検索して 漢数字に変換していく方法です。 住所の列だけを対象に一括で変換することはできないのでしょうか? 全ての範囲を対象とすると一括変換できるのですが、 郵便番号は算用数字のままでいいので、 変換する必要がないのです。 質問が分かりにくいかもしれないですが、 宜しくお願いします。
- ベストアンサー
- オフィス系ソフト
- エクセル2000で、漢数字から算用数字へ変換する関数
算用数字から漢数字へ変換する関数はあるようですが、その逆の漢数字を算用数字に変換する関数ってありますか? 住所録ですが、 ○○四丁目 ××三丁目 □□2丁目 の表示を、算用数字を用いて統一させたいのですが…、よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- Excel 全角数字を半角数字に
エクセルを使ってデータを管理しています。 郵便番号の項目には、500件ぐらい郵便番号が入力されていますが、全角数字で入力されたデータと、半角数字で入力されたデータが混じっていて、見辛いし管理もしづらいです。 関数を使って、全角数字を半角数字に変換する方法はありますでしょうか?
- ベストアンサー
- オフィス系ソフト
- 漢数字を算用数字に変換したい(緊急)
いまwordで漢数字を算用数字に変換したくて困っています。 三十五を35にしたいのですが何かいい方法ありませんか? アドバイスお願いします。
- 締切済み
- オフィス系ソフト
- wordで算用数字を縦書きにしたい
ワードで縦書きの原稿を書くとき数字は普通漢数字を使いますが、新聞記事などは算用数字が使われていることもたくさんあります。日付などがよい例です。「11月21日」というのをワードで縦書きに入力して変換すると「二十一」とか「二一」のように表記されるくらいです。新聞記事のように算用数字を半角にして「11」と「21」を縦に表記したいのですが、何かよい方法はないでしょうか?
- ベストアンサー
- オフィス系ソフト
- 筆まめで漢数字を算用数字に変換出来ますか?
筆まめでエクセルのデータから、漢数字の住所を算用数字に変換が自動で行えますか? ※OKWAVEより補足:「ソースネクスト株式会社の製品・サービス」についての質問です。
- 締切済み
- 筆まめ・はがき作成
- エクセルで数字の変換
エクセル2000です。 ひとつのセルの中に、たとえば「2009年は第1、第5営業部の24名」という文字列があったとします。これを半角一桁の数字のみに限定して全角の数字に変換する方法はないでしょうか? JIS関数だとすべてが全角になってしまいます。 関数でもVBAでもかまいません。 「2009年は第1、第5営業部の24名」と変換したいのです。 対象が何百もあるので困っています。 よろしくお願いします。
- ベストアンサー
- その他MS Office製品
- Excel2000での算用数値から漢数字への変換
算用数値から関数値の変換をNUMBERSTRING関数で返した時、123457⇒十二万三千四百五十七 (=NUMBERSTRING(B3,1))などと返されますが、壱弐参四五七このように返される関数などありますか?教えてください。
- 締切済み
- オフィス系ソフト
- 算用数字の行またがり記述について
算用数字による複数桁の数値を、行をまたがって記述するのは、一般的に正しいのでしょうか? たとえば、 「あきらさんは、1個50円のみかんを8個、1個2 10円のりんごを5個、買いました。」 という文章表現はゆるされますか?
- ベストアンサー
- その他(学問・教育)
お礼
回答いただきましてありがとうございます
補足
Option Explicit Option Base 1 Sub DATA変換() ' Sheets("棋譜ファイル").Select 'BR="棋譜ファイル"盤面の上枠行、ER="棋譜ファイル"の最下行、MB="棋譜ファイル"の先手の持駒行 Dim 行 As Byte, 列 As Byte, BR As Byte, ER As Integer, SR As Integer, EC As Integer, C As Integer, N As Integer, 枡(40) As Variant, MB As Byte, 持駒DATA As Variant, 持駒(7) As Variant, 指手() As Variant For 行 = 1 To Range("A1").End(xlDown).Row If Left(Cells(行, "A"), 1) = "+" Then BR = 行: Exit For Next 行 N = 1 For 行 = BR + 1 To BR + 9 For 列 = 2 To 18 Step 2 If Mid(Cells(行, "A"), 列, 2) <> " ・" Then 枡(N) = CStr(行 - BR) & CStr(列 / 2) & Mid(Cells(行, "A"), 列, 2) 枡(N) = Replace(枡(N), " ", "先") 枡(N) = Replace(枡(N), "v", "後") 枡(N) = Replace(枡(N), "杏", "成香") 枡(N) = Replace(枡(N), "圭", "成桂") 枡(N) = Replace(枡(N), "全", "成銀") N = N + 1 End If Next 列 Next 行 ER = Range("A1").End(xlDown).Row For 行 = 1 To ER If Left(Cells(行, "A"), 5) = "先手の持駒" Then MB = 行: Exit For Next 行 持駒DATA = Replace(Cells(MB, "A"), "先手の持駒:", "") For 行 = 1 To 7 If InStr(持駒DATA, " ") <> 0 Then 持駒(行) = Left(持駒DATA, InStr(持駒DATA, " ") - 1) 持駒DATA = Mid(持駒DATA, InStr(持駒DATA, " ") + 1) ElseIf InStr(持駒DATA, " ") = 0 Then 持駒(行) = 持駒DATA: Exit For End If Next 行 For 行 = 1 To 7 If 持駒(行) = "" Then Exit For 持駒(行) = Replace(持駒(行), "十一", 11) 持駒(行) = Replace(持駒(行), "十二", 12) 持駒(行) = Replace(持駒(行), "十三", 13) 持駒(行) = Replace(持駒(行), "十四", 14) 持駒(行) = Replace(持駒(行), "十五", 15) 持駒(行) = Replace(持駒(行), "十六", 16) 持駒(行) = Replace(持駒(行), "十七", 17) 持駒(行) = Replace(持駒(行), "十八", 18) 持駒(行) = Replace(持駒(行), "一", 1) 持駒(行) = Replace(持駒(行), "二", 2) 持駒(行) = Replace(持駒(行), "三", 3) 持駒(行) = Replace(持駒(行), "四", 4) 持駒(行) = Replace(持駒(行), "五", 5) 持駒(行) = Replace(持駒(行), "六", 6) 持駒(行) = Replace(持駒(行), "七", 7) 持駒(行) = Replace(持駒(行), "八", 8) 持駒(行) = Replace(持駒(行), "九", 9) 持駒(行) = Replace(持駒(行), "十", 10) If Len(持駒(行)) = 1 Then 持駒(行) = 持駒(行) & 1 Next 行 C = 1 For 行 = 1 To ER If Cells(行, "A") = "手数----指手---------消費時間--" Then SR = 行: Exit For Next 行 EC = Val(Mid(Cells(ER, "A"), 3)) ReDim 指手(EC) For 行 = SR + 1 To SR + EC 指手(C) = Mid(Cells(行, "A"), 6) 指手(C) = Replace(指手(C), " ", "") 指手(C) = Replace(指手(C), " ", "") 指手(C) = Replace(指手(C), "打", "") 指手(C) = Left(指手(C), InStrRev(指手(C), "(") - 1) 指手(C) = Replace(指手(C), "(", "") 指手(C) = Replace(指手(C), ")", "") If Left(指手(C), 1) = "同" Then 指手(C) = Left(指手(C - 1), 2) & Mid(指手(C), 2) 指手(C) = Switch(Mid(指手(C), 2, 1) = "一", 1, Mid(指手(C), 2, 1) = "二", 2, Mid(指手(C), 2, 1) = "三", 3, Mid(指手(C), 2, 1) = "四", 4, Mid(指手(C), 2, 1) = "五", 5, Mid(指手(C), 2, 1) = "六", 6, _ Mid(指手(C), 2, 1) = "七", 7, Mid(指手(C), 2, 1) = "八", 8, Mid(指手(C), 2, 1) = "九", 9) & Switch(Left(指手(C), 1) = 1, 1, Left(指手(C), 1) = 2, 2, Left(指手(C), 1) = 3, 3, Left(指手(C), 1) = 4, 4, _ Left(指手(C), 1) = 5, 5, Left(指手(C), 1) = 6, 6, Left(指手(C), 1) = 7, 7, Left(指手(C), 1) = 8, 8, Left(指手(C), 1) = 9, 9) & Mid(指手(C), 3) C = C + 1 Next 行 Sheets("配置DATA").Select 列 = 1 For N = 1 To 1000 If Cells(N, "A") = "" Then 行 = N: Exit For Next N For N = 1 To 40 If 枡(N) = "" Then Exit For Cells(行, 列) = 枡(N): 列 = 列 + 1 Next N Sheets("持駒").Select 列 = 1 For N = 1 To 1000 If Cells(N, "A") = "" Then 行 = N: Exit For Next N For N = 1 To 7 If 枡(N) = "" Then Cells(行, "A") = "なし": Exit For Cells(行, 列) = 持駒(N): 列 = 列 + 1 Next N Sheets("正解").Select 列 = 1 For N = 1 To 1000 If Cells(N, "A") = "" Then 行 = N: Exit For Next N For 列 = 1 To EC Cells(行, 列) = 指手(列) Next 列 ' End Sub 詰将棋問題1問を駒配置sheet、持駒sheet、正解sheetの各1行に転記しています。