"本当に"3行ごとのセルデータだけ抽出したいのねん/index関数
【結論】
=index(参照範囲,row()+((row()-1)*増加数-1)
1,3,5~と2づつ増加するA列のセル値を取得したい場合は
=index(A:A,row()+((row()-1)*1)
1,4,7~と3づつ増加するA列のセル値を取得したい場合
=index(A:A,row()+((row()-1)*2)
webにあるデータとか引っ張ってきて使いたいなぁって思ったときに、コピペしたらこんな感じで1列に情報が並んでる状態になることがあったんよ
んで、欲しい情報って1個やし、3行ごとに並んでるから、ここのデータだけ関数使って取得できへんかなーって調べたわけよ。
ほんだらヒットするのがだいたい、「=index(A:A,row()*3) これで3行ごとのデータが取れるよ!」みたいなやつ。
確かにこの関数でも3行ごとのデータは取れるで?でもこれで取得できるのんって、行数が、3,6,9,12って3の倍数の行数が取れるだけやねん。上のスプレッドシートで言うたら管理番号が取れる感じ。じゃあ[年齢]とか[氏名]取りたい場合は?って思って探しても出てこんし、仮に=index(A:A,row()*2)ってやったら年齢、前田、681768が取得されるねんな。
たまたま2の倍数とか3の倍数のところに取得したいデータがある場合はええで?でも1行目から始まって、以降3ずつ行数がずれるデータ(1,4,7~)とかはどないして取ったらええねん!?ってなってたわけよ。
ほんで編み出したのが、この数式
=index(参照範囲,row()+((row()-1)*増加数-1)
文字で書いたらやたらややこしそうやろ?でも理屈わかったら案外簡単やし、融通めちゃくちゃきくねん!
例えば、上の図でさっき困ってた[氏名]データだけ取得したい場合は、参照範囲がA:Aで増加数が3やから3-1で2。これを数式に当てはめると
=index(A:A,row()+((row()-1)*2)
ってなる。
ちなみにindex関数は、指定した範囲の中から、行数、列数を指定して対象のセルデータを抽出するって関数な。今回列は1列だけやから、行数のみを指定してる感じ!
んで、row関数はセルの行数を取得する関数で、前にも便利な使い方紹介してるからそれもよかったら参考にして!
やから上の数式の内容としては、
1行目の場合
=index(A:A,1+((1-1)×2)) → =index(A:A,1+0) → =index(A:A,1)
2行目の場合
=index(A:A,2+((2-1)×2)) → =index(A:A,2+2) → =index(A:A,4)
3行目の場合
=index(A:A,3+((3-1)×2)) → =index(A:A,3+4) → =index(A:A,7)
っていうふうに+3づつセルを移動した値を取得できるねん!
この数式は、抜き出したい行数の増加率が偶数でも奇数でも対応可能で、1番上に来る項目名(今回やと[氏名]とか[年齢]とか)も抜き出せるのが利点で、めちゃくちゃフレキシブルな対応が可能になってるのが特徴!
ちなみに今回、氏名を取得する数式を入れると
こんな感じで見事3行ごとの氏名データのみを抽出できました!
あ、数式入力したセルを下にオートフィルするのも忘れずに!
行数が変更になったときでも、数式内で変更するのは最後のかける数字のみやから行数はなんぼでも対応可能やで!
【まとめ】
=index(参照範囲,row()+((row()-1)*増加数-1)
1,3,5~と2づつ増加するA列のセル値を取得したい場合は
=index(A:A,row()+((row()-1)*1)
1,4,7~と3づつ増加するA列のセル値を取得したい場合
=index(A:A,row()+((row()-1)*2)
また一つ賢くなってしもたわ。
もしこの記事が役に立ったら下記の「気に入ったらサポート」ボタンより
缶ジュースおごってください♪