Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10519 / 13644 ツリー ←次へ | 前へ→

【21305】数値の列番号を元にsum数式文字列を作りたい みゅう 05/1/18(火) 17:04 質問[未読]
【21307】Re:数値の列番号を元にsum数式文字列を作り... Kein 05/1/18(火) 17:21 回答[未読]
【21309】Re:数値の列番号を元にsum数式文字列を作り... Jaka 05/1/18(火) 17:34 発言[未読]
【21337】Re:数値の列番号を元にsum数式文字列を作り... G-Luck 05/1/19(水) 10:04 回答[未読]
【21340】Re:数値の列番号を元にsum数式文字列を作り... みゅう 05/1/19(水) 13:18 お礼[未読]

【21305】数値の列番号を元にsum数式文字列を作り...
質問  みゅう  - 05/1/18(火) 17:04 -

引用なし
パスワード
   こんにちは。
初歩的な質問なのかもしれませんが・・・、

列番号を数値の変数で扱っており、
その列のセルを含むSUMの数式の文字列を作りたいのですが、
列番号を列アルファベットに変換する方法があるのでしょうか?

例えば変数 aaに3が入っている場合、"C"が知りたいのです。
Cells(5,3).Formula="=sum(C1:C4)"
などとしたいためです。

よろしくお願いします。

【21307】Re:数値の列番号を元にsum数式文字列を作...
回答  Kein  - 05/1/18(火) 17:21 -

引用なし
パスワード
   R1C1形式の数式なら、列番号を直接使えます。

Dim aa As Integer
 
aa = 3
Cells(5, aa).FormulaR1C1 = _
"=SUM(R1C" & aa & ":R4C" & aa & ")"

【21309】Re:数値の列番号を元にsum数式文字列を作...
発言  Jaka  - 05/1/18(火) 17:34 -

引用なし
パスワード
   こんにちは。

こんな方法も、長くなるけど...。
(0,0)の類とってもいいです。

MsgBox "=sum(" & Cells(1, 3).Address(0, 0) & ":" & Cells(4, 3).Address(0, 0) & ")"

【21337】Re:数値の列番号を元にsum数式文字列を作...
回答  G-Luck  - 05/1/19(水) 10:04 -

引用なし
パスワード
   無いなら「作っちゃえ」ということで作ってみました。
基本的には、26進数と考えいます。A=0,B=1,・・・,Z=25として AA=0_0
そうすると、1〜26(A〜Z)の範囲は矛盾するので、処理を分けています。

Public Function C1_A(No As Long) As String

  Const Alphabet As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  Const myMessage1 As String = "値が大きすぎます。" & vbCrLf & _
                 "1以上、256以下の値を指定してください"
  Const myMessage2 As String = "値が小さすぎます。" & vbCrLf & _
                 "1以上、256以下の値を指定してください"
  
  Dim bufF As String
  Dim myNo As Long
  Dim N As Long
  Dim M(1) As Long
  
  '初期化
  C1_A = ""
  bufF = ""
  myNo = No
  N = Len(Alphabet)
  
  'Noの判定
  If 256 < myNo Then
    MsgBox myMessage1
    Exit Function
  ElseIf myNo < 1 Then
    MsgBox myMessage2
    Exit Function
  End If
    
  '26進数と考えたときの矛盾の修正
  '26以下 A=1,B=2,・・・,Z = 26
  '26以上 AA=0_0,AB=0_1,・・・,IV=8_21
  If myNo <= 26 Then
    bufF = Mid(Alphabet, myNo, 1)
  Else
    myNo = myNo - N - 1
    M(0) = myNo Mod N   '26進数と考え第一桁 割り算の余
    M(1) = myNo \ N    '26進数と考え第二桁 割り算の商

    For i = LBound(M) To UBound(M)
      bufF = Mid(Alphabet, M(i) + 1, 1) & bufF
    Next i
  End If
  C1_A = bufF
End Function

【21340】Re:数値の列番号を元にsum数式文字列を作...
お礼  みゅう  - 05/1/19(水) 13:18 -

引用なし
パスワード
   皆様、ありがとうございました。

Keinさんの方法でやってみたんですが、
"=SUM($B$2:$B$32)"のような絶対アドレスになってしまいました。
私のやり方がまずいのでしょうか・・・(;_;)
とりあえず相対アドレスの方がよかったので、Jakaさんのを使ってみたところ、
うまくいきました。
G-Luckさんのは今見ました。(^^;この後使ってみます。

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

10519 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free