Excel VBA質問箱 IV

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

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


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

【25617】R1C1参照形式の列番号を、アルファベット列番号に変換する方法 えくせーる 05/6/8(水) 11:03 質問[未読]
【25618】Re:R1C1参照形式の列番号を、アルファベッ... IROC 05/6/8(水) 11:14 回答[未読]
【25620】Re:R1C1参照形式の列番号を、アルファベッ... えくせーる 05/6/8(水) 13:03 質問[未読]
【25621】Re:R1C1参照形式の列番号を、アルファベッ... つん 05/6/8(水) 13:06 発言[未読]
【25655】Re:R1C1参照形式の列番号を、アルファベッ... とおりすがり 05/6/9(木) 19:17 回答[未読]
【25619】Re:R1C1参照形式の列番号を、アルファベッ... Jaka 05/6/8(水) 12:05 回答[未読]
【25646】Re:R1C1参照形式の列番号を、アルファベッ... えくせーる 05/6/9(木) 14:02 お礼[未読]
【25647】Re:R1C1参照形式の列番号を、アルファベッ... Jaka 05/6/9(木) 14:21 発言[未読]
【25732】Re:R1C1参照形式の列番号を、アルファベッ... えくせーる 05/6/13(月) 9:20 お礼[未読]
【25648】Re:R1C1参照形式の列番号を、アルファベッ... Kein 05/6/9(木) 14:40 回答[未読]

【25617】R1C1参照形式の列番号を、アルファベット...
質問  えくせーる  - 05/6/8(水) 11:03 -

引用なし
パスワード
   R1C1参照形式では、列Aは列1なのですが、
R1C1列番号から、アルファベット列番号を取得したいのですが、どうしたらよいでしょう。
関数とかあるんでしうか?
列だけで構いません。(行はstringでくっつけます。)

例)Function(Col as Integer)←(integerって27,000くらいまでの整数でしたっけ?^^;)
Colに1をいれると、"A"が返ってくるような関数、方法が知りたいです。
Colに3なら"C" 

【25618】Re:R1C1参照形式の列番号を、アルファベ...
回答  IROC  - 05/6/8(水) 11:14 -

引用なし
パスワード
   そのようなことが必要な理由が知りたいところですが・・

Addressプロパティから文字列操作で、該当部分を切りだしてはどうでしょう?

【25619】Re:R1C1参照形式の列番号を、アルファベ...
回答  Jaka  - 05/6/8(水) 12:05 -

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

A〜Zまででよければ。
Col = 1
MsgBox Chr(Col + Asc("@"))

【25620】Re:R1C1参照形式の列番号を、アルファベ...
質問  えくせーる  - 05/6/8(水) 13:03 -

引用なし
パスワード
   ▼IROC さん:
>そのようなことが必要な理由が知りたいところですが・・
>
>Addressプロパティから文字列操作で、該当部分を切りだしてはどうでしょう?

理由は、

Range("A1:A100")を使う時にどうしようかなぁと思いまして…

CA1:CA100とかの場合に、列番号から「CA」をどうやって取得しようかなぁと悩んでました。


R1C1形式で、Rangeの中身を指定することができますでしょうか?

【25621】Re:R1C1参照形式の列番号を、アルファベ...
発言  つん E-MAIL  - 05/6/8(水) 13:06 -

引用なし
パスワード
   こんにちは^^
横から失礼します。

>Range("A1:A100")を使う時にどうしようかなぁと思いまして…
>
>CA1:CA100とかの場合に、列番号から「CA」をどうやって取得しようかなぁと悩んでました。

>R1C1形式で、Rangeの中身を指定することができますでしょうか?


Cellsを使わはったらどないでしょう?
ヘルプ見てみてください。

【25646】Re:R1C1参照形式の列番号を、アルファベ...
お礼  えくせーる  - 05/6/9(木) 14:02 -

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

Z以降ができないみたいなので、自分で関数を作りました。

無駄なものだとは思いますが、一応公開しておきます。


↓↓↓↓↓↓↓↓
Public Function R1C1Num_Convert(Num As Integer)

  'Num:列番号
  
  Dim Cnt As Integer
  Dim StrTxt1, StrTxt2 As String
      
  Dim Quotient As Double   '商(実数)
  Dim QuotientInt As Integer '商(整数)
  Dim Remainder As Integer  '余り
          
  Const Alphabet As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  Const AlphabetLen As Integer = 26
  
  If Num < 1 And 256 < Num Then
    Exit Function
  End If
  
  Quotient = Num / AlphabetLen
  
  If Quotient - Int(Quotient) > 0 Then
    QuotientInt = Int(Quotient)
  Else
    QuotientInt = Int(Quotient) - 1
  End If
    
  Remainder = Num Mod AlphabetLen
  If Remainder = 0 Then
    Remainder = AlphabetLen
  End If
  
  If QuotientInt = 0 Then
    StrTxt1 = ""
  Else
    StrTxt1 = Mid(Alphabet, QuotientInt, 1)
  End If
  StrTxt2 = Mid(Alphabet, Remainder, 1)
  
  R1C1Num_Convert = Trim(StrTxt1) & Trim(StrTxt2)
  
End Function

【25647】Re:R1C1参照形式の列番号を、アルファベ...
発言  Jaka  - 05/6/9(木) 14:21 -

引用なし
パスワード
   今ごろですが...。
つんさんの言いたかった事はこういう事だと思います。

col = 255
addd = Cells(1, col).Address(1, 0)
MsgBox Left(addd, InStr(1, addd, "$") - 1)

【25648】Re:R1C1参照形式の列番号を、アルファベ...
回答  Kein  - 05/6/9(木) 14:40 -

引用なし
パスワード
   解決後ですが、これでどうでしょーか ?

Sub Cl_Ad()
  Dim i As Integer, x As Integer, y As Integer
  Dim MyAd As String
 
  Do
   i = Application _
   .InputBox("列番号を1〜256までの数値で入力して下さい", Type:=1)
   If i = False Then Exit Sub
  Loop While i < 1 Or i > 256
  If i < 27 Then
   MyAd = Chr(i + 64) & ":" & Chr(i + 64)
  Else
   x = Int(i / 26)
   y = i Mod 26
   If y = 0 Then
     x = x - 1: y = 26
   End If
   MyAd = Chr(x + 64) & Chr(y + 64) & _
   ":" & Chr(x + 64) & Chr(y + 64)
  End If
  MsgBox MyAd
End Sub

【25655】Re:R1C1参照形式の列番号を、アルファベ...
回答  とおりすがり  - 05/6/9(木) 19:17 -

引用なし
パスワード
   >CA1:CA100とかの場合に、列番号から「CA」をどうやって取得しようかなぁと悩んでました。
なぜ、そのような関数やメソッドがエクセルに標準で用意されていないかというと、
このようなことを別な方法で実現しているからです。

範囲の左上セルの行番号と列番号、右下セルの行番号列番号がわかっているときは、

Range(Cells(1,79),Cells(100,79)) 
 =>Range("CA1:CA100")と同じセル範囲になります。
の様にします。

【25732】Re:R1C1参照形式の列番号を、アルファベ...
お礼  えくせーる  - 05/6/13(月) 9:20 -

引用なし
パスワード
   ▼Jaka さん:
>今ごろですが...。
>つんさんの言いたかった事はこういう事だと思います。
>
>col = 255
>addd = Cells(1, col).Address(1, 0)
>MsgBox Left(addd, InStr(1, addd, "$") - 1)


ありがとうございます。
この方法がコードが短くてベストだと思います。
さっそく、このコードで関数つくります。

Range(Cells(1,1),Cells(10,2)) は、 Range("A1:B10") と同じだと思いますが、
前者の方は、不具合があるみたいです。

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