AAからABに文字列をインクリメントする方法は?


10

AAまたはのようなExcelの文字列がありますXA

私はこのようにそれらをインクリメントする必要があります:

以下のためにAA、セルA1で、それはなりAB、セルB1にACセルB2にのように。

以下のためにXA、セルA1で、それはなりXB、セルB1にXCセルB2にのように。

人気のあるコードを試してみました=CHAR(CODE(A1)+1)が、Z以降は機能しません。

ヒントは大歓迎です。


Does not work after ZAZそれともそれ以降ですかZZ
Dave

こんにちはデイブ、私はABを試しました、それ以来Bを探していました。
アンディK

これはExcelがセルを参照する方法とは何かを持っている場合は、RC-表記と協力して、それを避けることを検討:File > Options > Formulas >R1C1 reference style
ダークHorsten

こんにちはダーク、アドバイスありがとうございます。しかし、なぜですか?
アンディK

1
たとえば、結果の文字列をINDIRECT数式で使用する場合は、@ DirkHorstenのコメントに注目してください。
CallumDA、2015年

回答:


11

これを試してください:「AA」をセルA1に入力し、次の数式をセルB1に入力してドラッグします。

=IF(RIGHT($A1,1)="Z", CHAR(CODE(LEFT(A1,1))+1),LEFT(A1,1))&CHAR(65+MOD(CODE(RIGHT(A1,1))+1-65,26))

次のように増加します:AA、AB、AC、...、AZ、BA、BB、BC ......など

この式を特定のプレゼンテーションに合わせて調整することもできます。これは「ZZ」を過ぎると機能しないことに注意してください。

更新:バグを修正


1
= IF(RIGHT(A1)= "Z"、CHAR(CODE(LEFT(A1))+ 1)、LEFT(A1))&IF(RIGHT(A1)<> "Z"、CHAR(CODE(RIGHT(A1) )+1)、CHAR(65))
user26631

3

エクセルスプレッドシート自体を使用して、文字をインクリメントすることができます。インクリメントはAXFC

最初にセル参照を作成します。 INDIRECT(A1&"1")
次に、次の列のアドレスを見つけます。 ADDRESS(1,COLUMN(INDIRECT(A10&"1"))+1)

次に、$ ?? $ 1から文字を抽出します。2つの方法:

  1. 2番目の$を探し、それらの間のテキストを切り取ります

    =MID(ADDRESS(1,COLUMN(INDIRECT(A1&"1"))+1),2,FIND("$",ADDRESS(1,COLUMN(INDIRECT(A1&"1"))+1),2)-2)
    
  2. 1と$を文字列の何もないものに置き換えます

    =SUBSTITUTE(SUBSTITUTE(ADDRESS(1,COLUMN(INDIRECT(A1&"1"))+1),"$",""),"1","")
    

あなたに最適なものを選択してください


2
あなたは、オプションの第三引数を含むによって置き換え、「$」を避けることができます4ADDRESS、それは相対セル参照を返すにする機能を。次に、式が必要です:=SUBSTITUTE(ADDRESS(1,COLUMN(INDIRECT(A1&"1"))+1,4),"1","")
Excellll

2

別の例:これをセルA1に入力し、数式を任意またはすべてのセルにコピーします。

= CHAR(MOD(ROW(A1)-1; 26)+65)&CHAR(MOD(COLUMN(A1)-1; 26)+65)

問題についてどのように考えるかの例として意図されています。


2

「Z」に達すると「A」にリセットされます

=IF(A1="Z", "A", CHAR(CODE(A1)+1))

さらに多くのifステートメントを使用して、それを超えて構築できます。

または

私はちょうど同じようなもののためにこの式を書きました:

IF(RIGHT(C2,1)="Z",IF(RIGHT(C2,2)="ZZ","A",CHAR(CODE(MID(C2,5,1))+1)),MID(C2,5,1))&IF(RIGHT(C2,1)="Z","A",CHAR(CODE(MID(C2,6,1))+1))

1

それを使用する別の解決策ADDRESS()は次のとおりです:

=MID(ADDRESS(1,26+ROW()),2,2)

上記の数式はAA、1行目とAB2行目などに返されます。

また、数学を使用すると、式は次のようになります。

=CONCATENATE(CHAR(INT(ROW()/26)+65),CHAR(MOD(ROW()-1,26)+65))

1

このコードを使用してセルのアドレスを取得しました

=ADDRESS(ROW($AT$17),COLUMN($AT$17)+Increment,4,1)

この例は、AT17セルアドレス用です。

増分は、増分する数を定義します

このコードはcellに記述しましたAx17

後で私はの値を得AT17ました

=INDIRECT(AX17)

できた!!!

行ではなく列をインクリメントできるようになりました!!!


0

これが私の解決策です(セルA1には「AA」が含まれています):

=IF(CHAR(CODE(RIGHT(A2;1))+1)="[";CHAR(CODE(LEFT(A2;1))+1);CHAR(CODE(LEFT(A2;1))))&IF(CHAR(CODE(RIGHT(A2;1))+1)="[";CHAR(65);CHAR(CODE(RIGHT(A2;1))+1))

0

列A(行1から)に、0から100で始まる連続番号を入力します[または要件まで]

セルB1に以下の数式を入力します

=CONCATENATE(CHAR(MOD(QUOTIENT(A1,26*26),26)+65),CHAR(MOD(QUOTIENT(A1,26),26)+65),CHAR(MOD(A1,26)+65))

数式をB1から列Bの他の行にコピーします[列Aに入力した行まで]

これは、AAAからZZZまでの3文字で機能します。

フォーミュラは、Noに従って変更する必要があります。必要な文字数(AAからZZ / AAAAAからZZZZZなど)


0

私はこれが主な質問から少しずれていることを知っていますが、私はそれがより完全な質問に答えると思います... A1に文字があり、B1の数字でステップされたい場合、次の数式コンボはそれを達成しますZZに1文字。

 =IF(LEN(A1)>1,IF((CODE(RIGHT(A1,1))+$B$1)>CODE("Z"),CHAR(CODE(LEFT(A1,1))+1)&CHAR(CODE(RIGHT(A1,1))-21),LEFT(A1,1)&CHAR(CODE(RIGHT(A1,1))+$B$1)),IF((CODE(A1)+$B$1)>CODE("Z"),"A"&CHAR(CODE(A1)-21),CHAR(CODE(A1)+$B$1)))

それを列にコピーすると、結果が表示されます。B5番号を変更すると、結果が変わります。


-1
=IF(AND(LEN(G1)=1,G1="Z"), "AA", IF(LEN(G1)=1, CHAR(CODE(G1)+1), IF(RIGHT(G1,1)<>"Z", LEFT(G1,1)&CHAR(CODE(RIGHT(G1,1))+1), CHAR(CODE(G1)+1)&"A")))

2
いくつかの説明を追加して、回答を拡張してください
Romeo Ninov '19

-1

カラムについては、以下が適切なソリューションです。

= IF(LEN(ADDRESS(1、COLUMN()))= 4、MID(ADDRESS(1、COLUMN())、2,1)、MID(ADDRESS(1、COLUMN())、2,2))


3
あなたの公式が「AAのような文字列をABにインクリメントする方法?」という質問にどのように答えるかわかりません。
メイトユハス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.