• ベストアンサー

列の足し算(Z+1=AA)について教えてください。

Excel VBAで(1)のように列(A)に数字(1~)を加算して 列(B~)を求めておりましたが、このやり方では列数がZ以上になると AA,AB,ACになりません。(3)の結果が得られるような関数はありますでしょうか? (1)Chr(Asc("A") + 1) = B (2)Chr(Asc("Z") + 1) = [ (3) Z + 1 = AA どなたか良い知恵がありましたら思います。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

以前にもこういう質問に答えたことがあって、その時は、質問者のように、文字列をインクリメントするような方法をやっていましたが、 エクセルのことはエクセルに聞けということで、 Public Function 列名(col As String, offset As Integer) As String Dim cellAddress As String cellAddress = Range(col & "1").offset(0, offset).AddressLocal(False, False) 列名 = Left(cellAddress, Len(cellAddress) - 1) End Function のようにすれば、 result = 列名("Z",1) でresult = "AA" になります。

zerokara
質問者

お礼

いつもお世話になっております。 今回はVBAで作成しておりますのでこの方法を 採用します。この度は有難う御座いました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

AA1セルの値を求めるのに Sub test03() Cells(1, 1) = Range("z1").Offset(0, 1) End Sub こういうこと(Offset)ができ増すが、そればよいのではないですか。 勘違いならすみません。

全文を見る
すると、全ての回答が全文表示されます。
  • bys07405
  • ベストアンサー率38% (37/97)
回答No.3

VBAでどのように使用されているかわかりませんが、列番号で指定するのはだめでしょうか。 例えば Columns("A") と Columns(1) は両方とも列の一番目(A列)を指します。 同じようにZ列は Columns(26) AA列は Columns(27) となります。

全文を見る
すると、全ての回答が全文表示されます。
noname#25358
noname#25358
回答No.2

 仕事でそのような機能を持つものを探しました。  結果、見つからなかったので自作しました(^_^;  A~Zを26進数の数値に変換し、演算を行ったのちにAA形式に再変換する手法をとりました。  下記は、CellRight にセル名と増分を与えると、移動先のセル名が返る関数です。(ちょっと見づらいかな?) Private Function CellRight(ByRef CellName As String, _ ByRef Movement As Integer) As String Dim CellID CellID = Split(DivedeCell(CellName), ",") CellID(2) = CellID(2) + Movement Do While CellID(2) > 26 CellID(1) = CellID(1) + 1 CellID(2) = CellID(2) - 26 Loop Do While CellID(2) < 1 CellID(1) = CellID(1) - 1 CellID(2) = CellID(2) + 26 Loop If (CellID(1) = 9 And CellID(2) > 22) Or CellID(1) > 9 Then CellID(1) = 9 CellID(2) = 22 End If If CellID(1) < 0 Then CellID(1) = 0 CellID(2) = 1 End If CellRight = ConbineCell(CInt(CellID(1)), CInt(CellID(2)), CInt(CellID(3))) End Function Private Function DivedeCell(ByRef CellName As String) As String Dim Result(3) As Integer Dim C As String Result(1) = 0 Result(2) = 0 Result(3) = 0 For I = 1 To Len(CellName) C = UCase(Mid(CellName, I, 1)) If Asc(C) >= &H41 And Asc(C) <= &H5A Then Result(I) = Asc(C) - &H40 Else Result(3) = Right(CellName, Len(CellName) - I + 1) Exit For End If Next If Result(2) = 0 Then Result(2) = Result(1) Result(1) = 0 End If DivedeCell = "," & Result(1) & "," & Result(2) & "," & Result(3) End Function Private Function ConbineCell(ByRef CellID1 As Integer, _ ByRef CellID2 As Integer, _ ByRef CellID3 As Integer) As String Dim Result As String Result = "" If CellID1 <> 0 Then Result = Chr(CellID1 + &H40) Result = Result & Chr(CellID2 + &H40) Result = Result & CellID3 ConbineCell = Result End Function

zerokara
質問者

お礼

次回VBで作成する場合の関数として使用させて 頂きます。この度は有難う御座いました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • A列かB列に数字が入っているセルを対称にして計算したい。

    A列とB列に数字が入っています。 A列とB列どちらともはいっていることも、入っていないこともないです。 必ずどちらかに数字が入っています。 C列で、 =100*「A列かB列数字が入っている方」 の関数が知りたいのですが。。。 よろしくお願いします。

  • Excel/各列に散りばめられた記号の集計関数は?

     win2000/Excel97です。  Excelの関数を利用して以下のようなことを実現したいのですが、どの関数をどのように使えばよいのか分かりません。分かる方、教えてください!  各行のA~Z列までに▲、●、■と言った記号をランダムに打ち込み、各行のAA列に▲の数、AB列に●の数、AC列に■の数を表示させたい。

  • アルファベット版00~99になって00に戻るVBA

    excel2010のVBAに付いてお力を貸してください。 例えばA1セルに「AA」と入っていた場合、マクロを一度実行したらA1を「AB」にしたいです。 最後(ZZ)まで行ったら最初(AA)に戻ります。 AA→AB AB→AC AZ→BA BA→BB ZZ→AA AAA→AAB AAZ→ABA ZZZ→AAA のような形です。 条件としましてはA1には1~8桁まで入る可能性があります。 大文字と小文字が入る可能性があります。(Aaなど混ざることはありません。) If Str = "Z" Then  Str = "A" ElseIf Str = "z" Then  Str = "a" Else  Str = Chr(Asc(Str) + 1) End If 一桁ならこんな感じになると思うのですが、繰り上げや、ZZZからAAAに戻すうまい方法が浮かびません。 よろしくお願い致します。

  • excelにて数式の列のズレ方を任意でセルコピーするには?

    Excelにて、A1からA10までの10個のセルに入力されている 全ての関数式を1列ズラした形でコピーしたいのですが、 (例えば =AA1*AA2  →  =AB1*AB2 みたいな) コピーする位置は2つズレていてC列にコピーしたいのですが、 そこにコピーをすると  =AA1*AA2  →  AC1*AC2 となってしまいます。 これをコピーして、 例えのように1つだけしかズレないようにするには どうすればよいのでしょうか? もちろんコピーするときは、A1:A10までをドラッグして 一度にコピーしたい事が前提です。 良い方法があればお教え下さい。お願いします。

  • エクセルの配列関数の制限について

    エクセルの配列関数の制限について V列にX列・Y列・Z列・AA列・AB列・AC列・AE列・AG列・P列を参照した配列関数を 下のように入力しています。 {=SUM((Y$1:Y$500=F7)*(Z$1:Z$500=H7)*(AA$1:AA$500)*(P7="○"),(AB$1:AB$500=F7) *(AC$1:AC$500=H7)*(AE$1:AE$500=H7)*(AG$1:AG$500)*(P7="×"))} このY列・Z列・AA列・AB列・AC列・AE列・AG列は、ぞれぞれ200行くらいしか 文字が入力されていない場合には、配列関数の結果がうまく表示されました。 これらのセルの200行以降から300行・400行と項目を増やしていったところ、 配列関数の結果がうまく表示されないセルが出てきました。 これは、配列関数の参照するセルに制限があるということでしょうか?

  • エクセルの関数について

    下記のようなことが関数で出来ますか? A1セルに「AA AB AC AD AE」というデータがあったときに、 B1に、A1に「AB」か「AC」という文字列があればそれを取り出す。なければブランク(もしくは#N/A) かつ優先順位もつけたい。 (「AB」も「AC」もある場合は「AB」) 「AA」と「AB」の間など、文字間は必ず半角スペースがあいている状態です。 具体的な例は↓の画像のような感じです。 かなり高度だと思うんですが、関数で実現できますでしょうか? よろしくお願いします。

  • ExcelでA列の期間だけB列に1を表示する

    A列の数字の期間だけB列に1を記述する関数をご存知でしたら教えて下さい。 AB 21 01 00 00 31 01 01 00 00 上の関数が組めたら下記のような期間がかぶっている日の計算を したいのです。 AB 21 32 01 12 31 01 01 どなたかわかる方おりましたら教えて下さい。 株式市場の分析をしています。

  • エクセルの文字列並べ替えについて

    エクセルの文字列並べ替えについて エクセル2000です。 半角文字列の数字とアルファベットを通常のエクセルの機能で昇順で並べ替えた場合 012 013 111 1AA 1B1 211 222 22C 23A 2AB 2BC のように並ぶと思います。(ここでの数字は数値でなく、すべて文字列です) 数字→アルファベットの順番のようです。 これを「アルファベット」→「数字」の順番で並べ替える方法はないでしょうか? 以下のような順にです。 ユーザー定義のリストに基づいた並べ替えがあることは存じていますが、3桁だけでも英数混在だと36×36×36=46,656個のリストを登録しなければならないことになり、現実的と思えません。 目的は、ホストコンピュータから出力される紙のデータがなぜかこのような順で出てきて、それにエクセルで作成したデータをあわせる必要が出てきたためです。 012 013 1AA 1B1 111 2AB 2BC 211 22C 222 23A エクセルの一般機能でもVBAでもかまいません。ご教示いただけると幸いです。

  • 単一セル内の文字(例:「ab」の場合、a=1、b=1)数を数えたい

    当番表(A列に当番の種別、B1~W1に時間、Y列、Z列、AA列に当番に従事した回数の合計)を作りたいと思います。 この時、COUNTIF関数を使って数えようと思いましたが、2人で担当した時間の場合(下表の「C2」「C3」)Y~AAに回数をそれぞれ振り分けるには、どうすればよいのでしょうか。教えて下さい。お願いします。 できれば関数でお願いしたいのですが、これに代わるもの例えばマクロでも結構です。 A | B | C | … | Y | Z | AA | -------------------------- 1|種別|10:30 |11:30 | … | a | b  |  c | --------------------------- 2|清掃| a  | bc | … | 1 | 1  | 1  | --------------------------- 3|受付| b  | ab | … | 1 | 2  | … |

  • エクセルで複数列を二列にまとめる

    エクセルのデータ成形に、知恵を貸していただけますでしょうか・・・ エクセルで以下のようなデータがあります(例では8行8列) コードは本当はランダムです。 #と右下の部分は空白セルです。横には数字、コード、数字、コードの並びで、数字は一行目のみです。 1 aa-1 2 bb-1 3 cc-1 4 dd-1 # aa-2 # bb-2 # cc-2 # dd-2 # aa-3 # bb-3 # cc-3 # aa-4 # bb-4 # aa-5 # bb-5 # aa-6 # aa-7 # aa-8 これらを 1 aa-1 1 aa-2 1 aa-3 . . 2 bb-1 2 bb-2 . . 4 dd-2 というように 1. 複数の列を2列ずつのグループで2列にまとめ 2. それぞれのグループごとに各コードの左のセルにグループの数字をつけたい   (どのコード(aa-1など)がどの数字グループなのか分かるように) と思っています。 なにかいい方法はありますでしょうか。 調べてはみたのですが、 複数列を一列ではなく、二列ずつまとめていることや、 各列の長さが一様ではないことなどから 各所で紹介されている方法が適用できないでおります。 VBAもほとんど使ったことがないので、それらを応用できません。 どうぞ知恵を貸していただけたらと思います。 よろしくお願い致します。

このQ&Aのポイント
  • キャリアシートDS-570WをDS-571Wに使用できるか検討しています。
  • DS-571WにはDS-530/570W用キャリアシート5枚セットがないため、問題なく使用できるか不明です。
  • A4のチラシの表面をスキャンしたいため、キャリアシートの購入を検討しています。
回答を見る

専門家に質問してみよう