[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『row関数でセル指定』(クロすけ)
こんにちは。 我ながら情けない質問ですが、以下の場合の書き方を教えていただけないでしょうか。
例えば =VLOOKUP("aaa",A1:A3,1,FALSE) の「A1」の「1」の部分をrow関数の戻り値で指定したいのですが、 =VLOOKUP("aaa","A" & row() & ":A3",1,FALSE) では「#VALUE!」エラーです。(引数が違うんですね。はい・・・)
どうぞ、よろしくお願いします。
INDIRECT関数を使って下さい。
「数式をフィルドラッグして使おう」と思って居られるなら 相対参照にしておくのでも良いのではないかと思います。
1行目に入れるなら。 =VLOOKUP("aaa",$A1:$A$3,1,FALSE) ~「1」の前は $ をつけない。
「突然どのセルに貼り付けても自行以降の範囲を参照する様ノ」 と言う事なら、やはり INDIRECT関数と 組み合わせて使うのが良いと思います。
(HANA)
"A" & row() & ":A3" この部分の結果は "A1:A3" という文字列であって、A1:A3 で得られるセル参照とは 違った意味になります。セルアドレスを表現する文字列を元にセル参照を行う関数と してINDIRECT関数があります。 =VLOOKUP("aaa",INDIRECT("A" & row() & ":A3"),1,FALSE) タイピングはHANAさんに軍配が上がるようです。 (みやほりん)(-_∂)b
=VLOOKUP("aaa",A1:A3,1,FALSE)
質問のために無理やりつくった数式なのでしょうか?
「本当にやりたいこと」「実際の数式」で質問したほうが 解決が早いように思います。
(えくせる青年)2009/8/27 12:15
>=VLOOKUP("aaa",A1:A3,1,FALSE) 提示された式に、何となく違和感を覚えますが・・・
参考までに =VLOOKUP("aaa",INDEX(A:A,ROW()):B10,2,0) =VLOOKUP("aaa",INDEX(A:A,ROW()):$B$10,2,0)
因みに、質問で提示されている式で セル範囲後段が 絶対参照か相対参照なのかが不明ですね
INDIRECT 関数では後半の A3 固定されますが ?
By しげちゃん
沢山のレスをありがとうございます!
「#VALUE!」エラーが出ている事で、文字列にするの?row()の戻り値はセル形式? となっていました。(TEXT関数試してみたり・・・) INDIRECT関数を、しげちゃんさんの忠告を気にしつつ試してみます。
えくせる青年さん、しげちゃんさんの仰るとおり、質問の為の簡易式でしたので 実際にやりたい事に当てはめ、うまくいかないようでしたら サンプル・目的等含めて改めて質問させていただきます。
ご回答いただいた皆様ありがとうございます。とりいそぎ、お礼まで。 試した結果はご報告したいと思います。(クロすけ)
試してみました!INDIRECT関数でやりたい事が実現できました。 今更、質問の式と全く違うものを出すのも気が引けますが、 質問の式がアレ過ぎたので、ご報告も兼ねてやりたかったことを記しておきます。 いつもこちらのサイトを拝見しながら、質問の仕方も大事だよな〜 と身に沁みていたはずなのに・・・
*やりたかったこと 固定長のデータを、区切りデータに変換する。
sheet1 →元データ [A] [1] 236800001くろすけズマンション 東京都・・・ [2]
sheet2 → 区切り位置テーブル [A] [B] [1] 開始 バイト数 [2] 1 1 [3] 2 8 [4] 10 20
sheet3 → 取り出し先 [A] [B] [C] [1] 2 36800000 くろすけズマンション [2] [3]
A1に =LEFT(Sheet1!$A1,Sheet2!$B$2) B1に =MID(Sheet1!$A1,INDIRECT("Sheet2!A" & COLUMN()+1),INDIRECT("Sheet2!B" & COLUMN()+1)) B1を必要分横にフィルドラッグ 1行目を必要分下にフィルドラッグ
で、取り出せました。 INDIRECT関数と、質問の仕方をマスターしたいと思います。 皆様ありがとうございました!(クロすけ)
レイアウトを以下にして [A] [B] [1] aaa [2] bbb [3] ccc
B1にご提示いただいた =VLOOKUP("aaa",INDEX(A:A,ROW()):B10,2,0) や =VLOOKUP("aaa",INDEX(A:A,ROW()):$B$10,2,0) を入れてみましたが「数式を計算できません・・・循環参照を形成しています」とエラーが出ます。
INDEX関数を調べたところ、B1に =INDEX(A:A,ROW()) と入れると自分の行番号と同じ行のA列の値をひっぱってくるようです。(この場合、aaa) =VLOOKUP("aaa",INDEX(A:A,ROW()):B10,2,0) のINDEX部分をF9してみると =VLOOKUP("aaa","aaa":B10,2,0) と、見慣れない記述になるのですが、これはどのように使用したら良いんでしょうか。
そもそも、私が何か勘違いしていると思うのでご指摘いただけると 今後の勉強になるので、どうぞよろしくお願いいたします。(クロすけ)
これって、 Sheet3の 1列目は Sheet2のA2からB2文字数分 2列目は Sheet2のA3からB3文字数分 3列目は Sheet2のA4からB4文字数分 が表示されれば良い
って事ですか?
でしたら、INDIRECT関数よりもINDEX関数の方が 良いかもしれません。
例えば、Sheet3の A2 =INDEX(Sheet2!$A$2:$A$4,COLUMN()) A3 =INDEX(Sheet2!$B$2:$B$4,COLUMN()) として横へフィルコピーすると 1 2 10 1 8 20 の様な結果が得られます。
(HANA)
いえ、取り出したいのはsheet1のA列の文字列です。
1行目でいうと、sheet1のA1に 「236800001くろすけズマンション 東京都・・・」 という文字列が入っているので、これをsheet3に区切りながら取り出したいという事です。 区切る為の指定位置が、sheet2に入っている数字になります。
sheet3のA1は 「sheet1のA1の文字を、左1文字目から1文字取り出したもの」 → 2 B1は 「sheet1のA1の文字を、左2文字目から8文字取り出したもの」 → 36800000 C1は 「sheet1のA1の文字を、左10文字目から20文字取り出したもの」 → くろすけズマンション (←空白あり)
です。(クロすけ) ※セル位置がぐちゃぐちゃになってしまったので、3:42修正
>いえ、取り出したいのはsheet1のA列の文字列です。 えっと、そう思っていますが。。。 書き方が悪かったですか?
つまり、 Sheet3の1列目は Sheet1のA1の文字列の内 Sheet2のA2(1)からB2(1)文字数分 Sheet3の2列目は Sheet1のA1の文字列の内 Sheet2のA3(2)からB3(8)文字数分 Sheet3の3列目は Sheet1のA1の文字列の内 Sheet2のA4(10)からB4(20)文字数分 が表示されれば良い ですよね?
A列の値を順に取り出すのが =INDEX(Sheet2!$A$2:$A$4,COLUMN()) 横にフィルドラッグする事で、順に 1,2,10 の値が得られます。 B列の値を順に取り出すのが =INDEX(Sheet2!$A$2:$A$4,COLUMN()) 横にフィルドラッグする事で、順に 1,8,20 の値が得られます。
ですから、MID関数に組み込んでいただければ良いと思うのですが?
(HANA)
HANAさん、すみません。MID関数に組み込むの意図を汲み取れていませんでした。 sheet3に =MID(Sheet1!$A1,INDEX(Sheet2!$A$2:$A$4,COLUMN()),INDEX(Sheet2!$B$2:$B$4,COLUMN())) を入れて、取り出すことが出来ました。 INDEX関数もマスター出来るように復習しておきます!(クロすけ)
>INDIRECT関数よりもINDEX関数の方が良いかもしれません。 と書いた理由を一つだけ上げておきます。
B1セルにINDIRECT関数を使用した式 B2セルにINDEX関数を使用した式 を入れて下さい。
まず、B1セルをアクティブにして 数式バーの隣の[ fx ]を押します。 すると −MID-−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− 文字列 [ Sheet1!$A1 ] = "236800001くろすけ 開始位置 [ INDIRECT("Sheet2!A"&COLUMN()+1 ] = 可変 文字数 [ INDIRECT("Sheet2!B"&COLUMN()+1 ] = 可変 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− = 可変 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− 数式の結果 = 可変
と表示されます。
次に、B2セルをアクティブにして 数式バーの隣の[ fx ]を押すと −MID-−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− 文字列 [ Sheet1!$A1 ] = "236800001くろすけ 開始位置 [ INDEX(Sheet2!$A$2:$A$4,COLUMN( ] = 2 文字数 [ INDEX(Sheet2!$B$2:$B$4,COLUMN( ] = 8 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− = "36800001" −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− 数式の結果 = 36800001
と表示されますね?
数式が希望する結果を返してくれないときに 原因を探す事になるのですが 下の様に表示されていたら、どこで思いがけない事が起きているのか 見つけやすいと思います。
質問の時は質問文だけを書くのではなく それで何をやりたいのかも 一緒に書いておかれるのが 良いと思います。
「○○をするために ××が出来れば良いと考えたので ××をする方法を知りたい」 と言った感じで。
すると、「いや、××より、△△ってやった方が良いよ」 って話につながる可能性が出てくると思います。
因みに、Sheet2のA列を挿入して Sheet2 [A] [B] [C] [1] 列 開始 バイト数 [2] 1 1 1 [3] 2 2 8 [4] 3 10 20 の様に、どの列番号の時に参照したいデータなのか書いておくと Sheet3のA1に、VLOOKUP関数を使って =MID(Sheet1!$A1,VLOOKUP(COLUMN(),Sheet2!$A$2:$C$4,2,FALSE),VLOOKUP(COLUMN(),Sheet2!$A$2:$C$4,3,FALSE)) こんな感じで出来ますね。
(HANA)
HANAさん、ご説明いただきありがとうございます。
leftやvlookupなど決まった関数や、サンプルそのままをアドレス替えてしか 使ってこなかったので勉強になりました。 質問の仕方も肝に銘じます。
VLOOKUPを使用した方法など、工夫の幅は本当に広いですね〜
INDEX関数などを調べた結果、しげちゃんさんご提示の式の使い方も理解できました。
[A] [B] [C] [1] aaa 1 ここに「=VLOOKUP("aaa",INDEX(A:A,ROW()):B10,2,0)」 [2] bbb 2 [3] ccc 3
ですね。 これもサンプルを載せずに適当な式で質問したせいで、 自分でわからなくなったという反省すべき内容でした。大変失礼しました。 レスを下さった皆様、本当にありがとうございました。(クロすけ)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.