[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2007/04/16(Mon) 11:28
投稿者名:ふく
Eメール:
URL :
タイトル:
引数に対応するアルファベットへの変換
いつもお世話になります。
引数に対応するアルファベットを返すファンクションを
下記のような感じでSelect Caseを使用して作製しています。

Select Case Num
    case 1
        ret = "A"
    case 2
        ret = "B"
       .
       .
    csse 26
        ret = "Z"
End Select

力技で書くにはかなりしんどいため
もう少しスマートな方法、関数等あれば
教えてください。

よろしくお願いします。

VB6sp6 WinXpです。

投稿時間:2007/04/16(Mon) 11:53
投稿者名:ダンボ
Eメール:
URL :
タイトル:
Re: 引数に対応するアルファベットへの変換
Private Function Alpha(Num As Integer) As String
    If (Num >= 0) And (Num < 26) Then Alpha = Chr(Asc("A") + Num)
End Function

(*)上記だけで投稿しようとしたら「アスキーコードだけの入力はできません! 」って怒られましたわ

投稿時間:2007/04/16(Mon) 11:59
投稿者名:ダンボ
Eメール:
URL :
タイトル:
Re^2: 引数に対応するアルファベットへの変換
訂正
>     If (Num >= 0) And (Num < 26) Then Alpha = Chr(Asc("A") + Num)
    If (Num >= 1) And (Num <= 26) Then Alpha = Chr(Asc("A") + Num - 1)

投稿時間:2007/04/16(Mon) 13:12
投稿者名:ふく
Eメール:
URL :
タイトル:
Re^2: 引数に対応するアルファベットへの変換
> Private Function Alpha(Num As Integer) As String
>     If (Num >= 0) And (Num < 26) Then Alpha = Chr(Asc("A") + Num)
> End Function
>
> (*)上記だけで投稿しようとしたら「アスキーコードだけの入力はできません! 」って怒られましたわ

回答ありがとうございます。
アスキーコードという手がありましたね。
もう少し拡張したことができそうです。

投稿時間:2007/04/16(Mon) 12:24
投稿者名:シュウ
Eメール:
URL :
タイトル:
Re: 引数に対応するアルファベットへの変換
> いつもお世話になります。
> 引数に対応するアルファベットを返すファンクションを
> 下記のような感じでSelect Caseを使用して作製しています。
>
> Select Case Num
>     case 1
>         ret = "A"
>     case 2
>         ret = "B"
>        .
>        .
>     csse 26
>         ret = "Z"
> End Select
>
> 力技で書くにはかなりしんどいため
> もう少しスマートな方法、関数等あれば
> 教えてください。
>
> よろしくお願いします。
>
> VB6sp6 WinXpです。

力技には変わりありませんが、配列を用意して1〜26まで
アルファベットを格納しておくのもいいかもしれないですね。

投稿時間:2007/04/16(Mon) 13:17
投稿者名:ふく
Eメール:
URL :
タイトル:
Re^2: 引数に対応するアルファベットへの変換
> 力技には変わりありませんが、配列を用意して1〜26まで
> アルファベットを格納しておくのもいいかもしれないですね。

回答ありがとうございます。

Arrayを使用した配列も考えたんですが...
Case文と労力は変わりませんねorz

ただ、変数をモジュールレベルにすればも少し使えそうです。

投稿時間:2007/04/16(Mon) 14:05
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: 引数に対応するアルファベットへの変換
> 引数に対応するアルファベットを返すファンクションを
> 下記のような感じでSelect Caseを使用して作製しています。

ret = Mid("ABCDEFGHIJKLMNOPQRSTUVWXYZ", num, 1)

投稿時間:2007/04/17(Tue) 09:38
投稿者名:ふく
Eメール:
URL :
タイトル:
Re^2: 引数に対応するアルファベットへの変換
> > 引数に対応するアルファベットを返すファンクションを
> > 下記のような感じでSelect Caseを使用して作製しています。
>
> ret = Mid("ABCDEFGHIJKLMNOPQRSTUVWXYZ", num, 1)

回答ありがとうございます。
目から鱗です。

不規則な文字列時に使用させていただきたいです。

投稿時間:2007/04/16(Mon) 14:33
投稿者名:YK
Eメール:
URL :
タイトル:
Re: 引数に対応するアルファベットへの変換
> いつもお世話になります。
> 引数に対応するアルファベットを返すファンクションを
> 下記のような感じでSelect Caseを使用して作製しています。
>
> Select Case Num
>     case 1
>         ret = "A"

Debug.Print Chr(num + 64)

投稿時間:2007/04/17(Tue) 09:41
投稿者名:ふく
Eメール:
URL :
タイトル:
Re^2: 引数に対応するアルファベットへの変換
> > いつもお世話になります。
> > 引数に対応するアルファベットを返すファンクションを
> > 下記のような感じでSelect Caseを使用して作製しています。
> >
> > Select Case Num
> >     case 1
> >         ret = "A"
>
> Debug.Print Chr(num + 64)

回答ありがとうございます。

今回、もやもやっと求めていたものになりました。

投稿時間:2007/04/17(Tue) 09:44
投稿者名:ふく
Eメール:
URL :
タイトル:
Re: 引数に対応するアルファベットへの変換
ダンボさん、シュウさん、魔界の仮面弁士さん、YKさん
回答ありがとうございます。

今回はYKさんより頂いた
chr(num+64)を使用しようかと思います。

投稿時間:2007/04/17(Tue) 10:37
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^2: 引数に対応するアルファベットへの変換
> 今回はYKさんより頂いた
> chr(num+64)を使用しようかと思います。

その場合は、「64」というマジックナンバーの意味を示すために、
コード中に何らかのコメントを併記するべきかも。(老婆心)

Chr(Asc("A") + Num - 1) というダンボさんのコードの場合は、
A,B,C…を得たいという目的を読み取る事ができますが、
Chr(Num + 64) というマジックナンバーを使ったコードだと、
結果は同一であっても、その意味を想像しにくいですし。

投稿時間:2007/04/18(Wed) 08:38
投稿者名:ふく
Eメール:
URL :
タイトル:
Re^3: 引数に対応するアルファベットへの変換
> > 今回はYKさんより頂いた
> > chr(num+64)を使用しようかと思います。
>
> その場合は、「64」というマジックナンバーの意味を示すために、
> コード中に何らかのコメントを併記するべきかも。(老婆心)
>

アドバイスありがとうございます。
コメントとして残しておくことにします。
また、別プログラムにおいてもマジックナンバーを使用する場合には
同様の処置をしていくことにします。


> Chr(Asc("A") + Num - 1) というダンボさんのコードの場合は、
> A,B,C…を得たいという目的を読み取る事ができますが、
> Chr(Num + 64) というマジックナンバーを使ったコードだと、
> 結果は同一であっても、その意味を想像しにくいですし。

なぜ、回りくどいことをするのかな?と思っていました。
そういう意図があったのですね。

ダンボさんごめんなさい。まったくきづきませんでした。

投稿時間:2007/04/18(Wed) 10:54
投稿者名:ダンボ
Eメール:
URL :
タイトル:
Re^4: 引数に対応するアルファベットへの変換
美しいコードとは、
・誰が読んでも意味が分かりやすい
・時間がたった後でも理解しやすい
・本質的な解法を使用している
・無駄な処理が無い
・適切な変数名、関数名をつける
・適切なモジュール分割、モジュール構成
・考えの一貫性、コーディング規約の遵守
あたりですか。

プログラマのお作法としては美しいコードを目指すべきですが、
・ソースコードステップ数は逆に増える場合もある
・実行速度は落ちる場合もある

でもそれらはVB言語を選んだ時点であきらめるべきことですね。

#この投稿にレスされると発散するので、続きが必要なら雑談掲示板へ