質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Q&A

解決済

2回答

511閲覧

Googleスプレッドシートで「1つの列に2つの連番を作成する方法」を知りたいです

umino

総合スコア54

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

0グッド

0クリップ

投稿2021/08/29 03:21

編集2021/08/29 04:58

Google SpreadSheetで、下記の処理を叶えたいです。
お詳しい方、ご教示おねがいできませんでしょうか。

●前提
・A列にX,Yいずれかの文字を手入力する。
・対象の行は1行目でなく、途中から始まっている。

●実現したいこと
・B列にXからの連番、Yからの連番をそれぞれ表示する。
・(下記例でいうと)365行目からこの処理を適用したい。
・可能であれば、1セルのみの式入力で展開したい(ArrayFomulaを使う?と考えていますが、ここは必須ではないです)

●例
. A B
364 (1行目からここまで空欄)
365 X X001
366 X X002
367 Y Y001
368 X X003
369 Y Y002
370 X X004
371 Y Y003
372 Y Y004
...

IF,BASE,ROWを組み合わせてみたのですが、1列に2種類の文字混在にて連番、というのがどうしてもできませんでした。
GASにお詳しい方、ご教示お願いできませんでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Daregada

2021/08/29 03:40

タイトルにGASとあるわりに、質問文には「式入力で」や「ArrayFormulaを」と書いてあるので、GAS(スクリプト)ではなく、スプレッドシート内の数式(関数を使用)で解決したいのですか?
umino

2021/08/29 05:00

Daregadaさん すみません、GASは誤りでした。タイトル、タグ、本文を修正しました。 おっしゃる通り、スプレッドシート内の数式で解決を前提に投稿したものでした。 (こだわりはなくGASでも構いませんが、投稿時は関数を想定していました) ご指摘ありがとうございました。
guest

回答2

0

入力済みのA列の値が書き換わった場合にそれ以降の行のB列の値がすべて書き変わっていいのなら、B365に以下を設定すればいいかと思います。B366以降はオートフィルを使えばA列に"X"or"Y"を入力すれば自動的にB列に値が表示されます。

SPREADSHEET

1=IF($A365="X","X"&TEXT(COUNTIF($A$2:$A365,"=X"),"000"),IF($A365="Y","Y"&TEXT(COUNTIF($A$2:$A365,"=Y"),"000"),""))

投稿2021/08/29 09:49

draq

総合スコア2573

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

umino

2021/08/29 11:42

draqさん ご回答ありがとうございます。 期待動作しました、関数だと、事務方でもメンテナンスしやすいのでいいですね。 draqさんが教えてくださった内容をもとに、プラスアルファで1セルだけの展開で反映する方法も探してみます。 シンプルな解決策を教えてくださって大変勉強になりました。 ありがとうございました。
guest

0

ベストアンサー

こだわりはなくGASでも構いませんが

とのことなので、GASで解決するコードを示します。A列,B列の内容をgetValuesで二次元配列valuesにとり、逐次処理してから、setValuesでシートに書き込んでいるだけです。

GAS

1function myFunction() { 2 const sp = SpreadsheetApp.getActiveSpreadsheet(); 3 const sh = sp.getActiveSheet(); 4 const range = sh.getRange(1, 1, sh.getLastRow(), 2); 5 const values = range.getValues(); 6 7 for (let i = 0, x = 0, y = 0; i < values.length; i++) { 8 var target = values[i][0]; 9 if (target === 'X') { 10 x++; 11 values[i][1] = 'X' + ('000' + x).slice(-3); 12 } else if (target === 'Y') { 13 y++; 14 values[i][1] = 'Y' + ('000' + y).slice(-3); 15 } 16 } 17 18 range.setValues(values); 19}

投稿2021/08/29 05:49

Daregada

総合スコア11990

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

umino

2021/08/29 10:38

Daregadaさん ご回答までいただきましてありがとうございます。 教えていただいた通りに実行したところ、無事に期待通りの結果を得ることができました。 配列で取得する方法をまるで思いつかなかったので、勉強になりました。 実際の運用はタイトル行からrangeを取得したりするので、教えていただいた内容を参考に、カスタマイズもやってみようと思います。 ご回答いただきまして、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問