[[20091119132221]] 『数字を漢数字になおしたい』(Po) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『数字を漢数字になおしたい』(Po)

色々と試しているのですが、出来なくて困っています。

年賀状の印刷フォーマットをエクセルにて作成しました。

sheet1に住所録があり、sheet2に年賀状印刷フォーマットがあります。

sheet2には、=IF($AF$6="","",VLOOKUP($AF$6,sheet1!$A$4:$W$196,20,FALSE))

といった形でsheet1のデータを持ってきています。

住所録の数字は数字です、

これをsheet2(印刷する時でもかまいません)では漢数字で表示したいのですが

どうしたら良いのでしょうか?


 最初に印刷用の住所を作っておけばいいんじゃないのかな。
 と、思った。
 BJ

BJさん、コメントありがとうございます。

このデータは既に数字で住所が入力されているもので、500件近くあります。

これを数字に直すとなると大変で・・・・


 漢数字と言ってもいろいろあります。
 1980 →
 一九八〇
 千九百八十 etc.

  一九八〇 とするなら、1→一、2→二のように置換10回でできますが、
 それもやりたくない?
 (奈々氏)

 【関連ログ】
[[20090213123857]] 『数字を漢数字の変換』(歩く)
[[20080310233015]] 『ユーザー定義で設定した書式が保存されない』(かあさん)
[[20070527184508]] 『住所内算用数字を印刷時漢数字にしたい。』(ひろぴょん)
[[20061123094713]] 『住所録の数字を漢数字へ』(大沢)
[[20051216235844]] 『住所録をはがき印刷』(きなこ)
[[20040831130230]] 『数字を漢数字にするにはどうしたら?』(とんぼ)
 
(みやほりん)(-_∂)b
 

 面白そうなのでユーザー定義関数を作ってみました。

 以下のコードを標準モジュールに配置して
 1234 → 千二百三十四 なら
 =IF($AF$6="","",TextNumToKanji(VLOOKUP($AF$6,Sheet1!$A$4:$W$196,20,FALSE),TRUE)) 

 1234 → 一二三四 なら
 =IF($AF$6="","",TextNumToKanji(VLOOKUP($AF$6,Sheet1!$A$4:$W$196,20,FALSE),FALSE)) 

 として使ってみてください。

  '文字列内の数字を漢数字にするUDF
  'h = True : 1234 → 千二百三十四
  'h = False: 1234 → 一二三四
  Function TextNumToKanji(ByVal txt As String, Optional h As Boolean = True) As String
  Dim i As Long, buf As Variant, flg As Boolean
  For i = 1 To Len(txt)
    If IsNumeric(Mid$(txt, i, 1)) Then
      Mid$(txt, i, 1) = StrConv(Mid$(txt, i, 1), vbNarrow)
      flg = True
    End If
  Next i
  If flg = False Then
    TextNumToKanji = txt
    Exit Function
  End If
  If h = True Then
    buf = SplitStrLong(txt)
    For i = 0 To UBound(buf)
      If IsNumeric(buf(i)) Then
        buf(i) = Application.WorksheetFunction.Text(buf(i), "[DBNum1]")
      End If
    Next i
    TextNumToKanji = Join(buf, "")
  Else
    For i = 1 To 10
      txt = Replace(txt, _
        Choose(i, "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"), _
        Choose(i, "〇", "一", "二", "三", "四", "五", "六", "七", "八", "九"))
    Next i
    TextNumToKanji = txt
  End If
  End Function

  '文字列中の文字と数字を分離するUDF
  Function SplitStrLong(ByVal 分割文字列 As Variant, _
                        Optional 配列返し As Boolean = True, _
                        Optional 区切り文字 As String = vbTab) As Variant
  Dim myReg As Object, m As Object, buf As String
  With CreateObject("VBScript.RegExp")
    .Pattern = "^[^\d]+|^\d+"
    .Global = True
    Do
      Set myReg = .Execute(分割文字列)
      For Each m In myReg
        SplitStrLong = SplitStrLong & 区切り文字 & m.Value
        分割文字列 = Replace(分割文字列, m.Value, "", , 1)
      Next m
    Loop While myReg.Count > 0
  End With
  SplitStrLong = Mid$(SplitStrLong, Len(区切り文字) + 1)
  If 配列返し Then SplitStrLong = Split(SplitStrLong, 区切り文字)
  End Function

 (momo)

momoさん、コメントありがとうございます!

希望通りのものが出来ましたっ!凄いです!

本当にありがとうございます。

一個だけ質問なのですが、

ハガキ印刷をするので縦書きで設定しています。

四−十五の様に−が縦書きでも−のままなのですが、

このハイフンを縦にする方法はありますか?


 ワードなら縦中横とかあるので簡単ですが、エクセルはそういうのが苦手なので
 =SUBSTITUTE(A1,"−","|")
 くらいしか思いつきませんが・・・
 A1の所に元データ、もしくは前述のVLOOKUP関数を。
 (momo)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.