関数を書き換えると実現できるのか?

このQ&Aのポイント
  • 関数の処理方法で問題を抱えている場合、関数を書き換えることで解決できる可能性があります。具体的にどのように書き換えるべきかは、詳細な情報が必要です。
  • ARRAYFORMULA関数を書き換えるか、スクリプトを0から書き直す必要があるかは、具体的な要件によります。解決策を見つけるためには、問題の詳細な内容が必要です。
  • 解決方法を知るためには、問題がどのように起こっているか、想定される結果がどのようなものかを詳しく説明してください。それによって、具体的なアドバイスが得られる可能性が高まります。
回答を見る
  • ベストアンサー

関数のどこを書き換えれば実現できるのでしょうか

以前に"質問ITmedia"でChiquilinさまという回答者の方から以下の関数を教えて頂ことがあります。 当時、短時間でこれだけの関数を書いて頂き本当に助かったのですが小さな問題が解決できず、何度か見様見真似でトライしてみたのですが、実現できず、この度質問させていただきました。 -------------Chiquilinさまから教えて頂いたスクリプト-------------- =QUERY({ARRAYFORMULA(ROW('Sheet1'!A2:K)),'Sheet1'!A2:K},"select Col2, Col3, Col4, Col5, Col6, Col7, Col8, Col9, Col10, Col11, Col12 where Col2 Is Not Null and Col1 + 19 > " &COUNTA('Sheet1'!A2:A) &" order by Col2 desc, Col1 desc") -------------Chiquilinさまから教えて頂いたスクリプト-------------- 現在、この関数の処理方法で問題を抱えています。この関数は、 Sheet1のA2:Kにあるデータをコピーして一番下のデータから10行分をコピーして、コピーした下の行のデータから順番に、このスクリプトがあるシートのA2:Kに張り付けなさいという関数です。 結果、以下のようになります(Sheet1→Sheet2)。 ■Sheet1 1行目 2行目 3行目 4行目 5行目 6行目 7行目 8行目 9行目 10行目 ARRAYFORMULA関数で以下のように処理されます。 ■Sheet2 10行目 9行目 8行目 7行目 6行目 5行目 4行目 3行目 2行目 1行目 下記のようにさせたいのですが、どのようにARRAYFORMULA関数を書き換えれば下記のようにコピーさせることができるでしょうか? それとも、もう一度0からスクリプトを書き直す必要があるのでしょうか。 ■Sheet2 9行目 10行目 7行目 8行目 5行目 6行目 3行目 4行目 1行目 2行目 もし、解決する方法を分かる方がいらっしゃいますようでしたら些細なことでも結構ですのでアドバイス頂けないものでしょうか。 恐れりりますがなにとぞよろしくお願いいたします。 めぐみ

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

  • ベストアンサー
  • mt2015
  • ベストアンサー率49% (258/524)
回答No.5

セル関数での対応ですが、添付の図の様な事がしたいのであれば、Sheet2のA2に↓の式を入れ、横と下にコピーでどうでしょう =OFFSET(Sheet1!$A$1,COUNTA(Sheet1!$A:$A)-ROW()+MOD(ROW(A2),2)*2,COLUMN()-1)

megumi199
質問者

お礼

mt2015さま お礼のご連絡が遅れてしまい大変申し訳ありませんでした! 本当にいつも親身に教えてくださり本当にありがとうございます。 風邪をひいてしまってずっと寝込んでしまいました。 今日ようやくベッドから降りれるようになって。 さきほど、アドバイス頂いた方法で完ぺきに私のしたかったことが実現できました! 本当に丁寧にご説明くださりありがとうございました。 また、ご連絡が遅れてしまい本当に本当に申し訳ありませんでした! 今後とも何卒よろしくお願いいたします! めぐみ

その他の回答 (5)

  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.6

>これ以上、ご面倒おかけしたくないのでご返信は結構です。 とのことですので、以下の説明をして下ります。 =QUERY({ARRAYFORMULA(ROW('Sheet1'!A2:K)),'Sheet1'!A2:K},"select Col2, Col3, Col4, Col5, Col6, Col7, Col8, Col9, Col10, Col11, Col12 where Col2 Is Not Null and Col1 + 19 > " &COUNTA('Sheet1'!A2:A) &" order by Col2 desc, Col1 desc") この計算式の意味 Sheet1のA2~K列の末尾まで値群が対象です。 Col1が取り出すときの行番号群です。 Col2が取り出したA列の値群です。 Col3が取り出したB列の値群です。 省略 Col12が取り出したK列の値群です。 取り出すときの条件 ・A列が空欄ではない、かつ ・末尾行から上方向に20行          各行のソート順 第一キー:A列の降順 第二キー:行番号の降順 です。     

  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.4

>私のしたいことのイメージは下記のアドレスにて共有しました。 このような話であれば、 提示された「スクリプト」の末尾 order by Col2 desc, Col1 desc") これを単に order by Col2 , Col1 desc") とすれば期待の結果になるものと思います。

megumi199
質問者

お礼

何度も申し訳ありませんでした。 思った通りの動作はしませんでした... これ以上、ご面倒おかけしたくないのでご返信は結構です。 本当に見知らぬわたくしにこんなに熱心にご指導くださりましてありがとうございました。

  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.3

スクリプトに order by Col2 desc, Col1 desc とありますので、 おそらく、A2の行から10行を(単純に)逆順に並べ替えているのではなく A列の降順に並べ、更に、 A列に同じ値があったら行番号の降順に並べているだろうと思います。 行の並びが逆転しているように見えるのは、 たまたま、Sheet1のA列が昇順に並んでいるからだろうと思います。 だとすれば、、 Sheet1のA列を期待のように並ぶよう書き換える、 あるいは、 どこかに、並べ替え専用の列を設け、 課題スクリプトを書き換えるという対応が順当と思います。 課題スクリプトは、SQL文の並べ替え機能を使っていますので 期待のような結果にするためには、 ソートキー(並べ替えに使う列)が必要です。 少なくとも私は、期待の並べ替えをSQL文で、 かつソートキーの列無しで実現することはできません。 もし、 並べ替え元の範囲(Sheet1)がA2からK11固定で かつ、 出力先範囲もA2からK11セル固定でよければ、 出力先範囲のセル全数に =INDEX('Sheet1'!$A$2:$K$11,(IF(MOD(abs(ROW()-12),2)=1,abs(ROW()-12)+1,abs(ROW()-12)-1)),COLUMN(),1) といった計算式を埋めることで期待の結果になるだろうと思います。 追記 Sheet1とか、A2:Kといった記述から 多くの皆さんはエクセルの話と誤解しましょう。 まだまだエクセルが事実上のスタンダードですから。 なので、質問内容の冒頭で、 Googleのスプレッドシートであることを明示したほうがいいと思います。

megumi199
質問者

お礼

HohoPapaさま お世話になっています、めぐみです。 貴重なアドバイスを頂きまして大変ありがとうございます。 また、懇切丁寧に教えてください本当にありがとうございました。 早速HohoPapaさまから頂いた関数を試してみましたが私の説明不足の問題で、想定していた結果にはなりませんでした。 いろいろと試してみたのですがよくわからず、再度ご連絡させていただくこととなりました(大変申し訳ありません)。 ただ、ものすごく私のしたいことに近づいているのは感覚で分かるのですが。。。 私のしたいことのイメージは下記のアドレスにて共有しました。 https://drive.google.com/file/d/12_rdt0rzdjymdkBrOCYO2IU7xP775sOI/view?usp=sharing グーグルスプレッドシートSheet1,Sheet2を共有しました。 https://docs.google.com/spreadsheets/d/1lDSheilFLCour7o-DT8cb64bcxrkjXqGH_i1HzWjH5M/edit?usp=sharing 私のしたいことは、下記のSheet1をSheet2のようにしたいです。 ※Sheet2に関数を埋め込むことで、Sheet2のように表示させたいです。 ※Sheet1の”データがある一番最後の行から20行”を処理します。 お忙しいところ大変恐れ入りますが、HohoPapaさまにお頼りするしかなく、なにとぞご指導いただきたくなにとぞよろしくお願いいたします。 めぐみ

  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.2

済みません、 一つ伺い損ねてました。 Excelですか? https://xn--t8j3bz04sl3w.xyz/spreadsheet/arrayformula/1918/

megumi199
質問者

補足

Excelには「arrayformula関数」はありません。

  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.1

確かに、 サポートが無いと、困りますよね。 1から、何がしたいか、 お教え頂ければ、 ある程度、技術が 既に、浸透していて 一定、 誰でも、読める、 そういった、意味に おいても メンテナンス性の、高い、 しかも、 ある程度は、古いバージョンでも 稼働する、 プロ志向の、高い 新たな式を、 ご提供できる事も あると、思います。 如何でしょうか? お話し、頂けますでしょうか?

関連するQ&A

  • 関数のどこを書き換えれば実現できるのでしょうか

    以前に質問ITmediaでChiquilinさまという方から下記の素晴らしい関数を教えて頂きました、めぐみと申します。 当時、短時間でこれだけの関数を書いてくださり本当にありがたかったです。 =QUERY({ARRAYFORMULA(ROW('Sheet1'!A2:K)),'Sheet1'!A2:K},"select Col2, Col3, Col4, Col5, Col6, Col7, Col8, Col9, Col10, Col11, Col12 where Col2 Is Not Null and Col1 + 19 > " &COUNTA('Sheet1'!A2:A) &" order by Col2 desc, Col1 desc") 現在、この関数に問題を抱えています。この関数は、 Sheet1のA2:Kにあるデータをコピーして一番下のデータから10行分をコピーして、コピーした下の行のデータから順番に、このスクリプトがあるシートのA2:Kに張り付けなさいという関数で、結果、以下のようになります(Sheet1→Sheet2)。 ■Sheet1 1行目 2行目 3行目 4行目 5行目 6行目 7行目 8行目 9行目 10行目 関数で以下のようにコピーされます。 ■Sheet2 10行目 9行目 8行目 7行目 6行目 5行目 4行目 3行目 2行目 1行目 今抱えている問題なのですが、これを以下のようにしたいのです。 何度か見様見真似でトライしてみたのですが、実現できませんでした。 スクリプトを書き換えれば下記のように動作させることは可能なのでしょうか? それとも、もう一度0からスクリプトを書き直す必要があるのでしょうか。 ■Sheet2 9行目 10行目 7行目 8行目 5行目 6行目 3行目 4行目 1行目 2行目 もし、解決する方法が分かる方がいらっしゃいますようでしたらアドバイス頂けないものでしょうか。 恐れりりますがなにとぞよろしくお願いいたします。

  • エクセル2010の関数コピーについて

    エクセル2010でシート2~10にデータを入れ、シート1は取りまとめようとして一覧表を作り、シート2~10に入力したデータがコピーされるように関数を入れています。 シートを増やそうと思い、一覧表の行も増やし関数をコピーしようとしたのですが、通常2行目がシート2がコピーされるように関数が入っていたら、3行目にコピーすると自然とシート3がコピーされるように関数の数字も変わってくれますよね? それが変わらず、まったく同じ関数になってしまうのです。 他の人が作ったものから追加しようとしているので、何か設定しているのかも知れないのですが、まったくわかりません。 ちなみにコピーをするときは何もメッセージは出ません。どなたか教えてください。よろしくお願いします。

  • シートの必要な行だけをコピーしたい。

    シートの必要な行だけをコピーしたい。 sheet1にデータを取り込み、sheet2でvlookupの関数によりデータの抽出を行っています。sheet1に取り込まれる行は、2行~2600行と幅が広いので、現状はsheet2に関してMAX2600行分のvlookup関数を設定しているのですが、行が短い場合に処理時間がかかってしまい、効率がよくありません。sheet1に取り込まれた必要行分だけをsheet2にコピーペースト展開するにはどの様な対応をしたらよいか教えて 頂きたく。 1行目ににvlookupの関数が設定してあるとして、現状は下記の通り、マクロにて2600行分コピーペーストしてあります。 Range("A1:J1").Select Selection.Copy Range("A2:J2600").Select ActiveSheet.Paste

  • Excelの関数処理教えてください

    Excelでデータ抽出処理を以下のようにしたく、関数でできませんか? 1、Sheet1には以下のようなデータになっており、   同じ取引先のデータも含んでいます。   <取引先>  <商品名>   <数量>  <金額>  <重要フラグ>    A社   みかん     10    23,000    0    A社   もも      5    12,000    1    B社   ぶどう     3    8,000      1    C社   みかん     5    11,500    0    C社   バナナ     5    9,000     1    D社   すいか     8    21,500    0    D社   メロン     15    39,000     1 2、このSheet1のデータをSheet2に需要フラグ="1"のデータのみ抽出したいです。   Sheet2表の最下に合計行も追加した。 3、このSheet1のデータをSheet3に取引先毎に集計したデータを表示したいです。   Sheet3表の最下に合計行も追加した。  できれば関数でできればいいのですが、  何かよい方法はないでしょうか?よろしくお願いします。    関数でできなければ、VBAの標準モジュールでもやりたいですが、  どなたかご教授よろしくお願いします。

  • Excelの関数を使用したセルをコピーする場合

    よろしくです。 Sheet2のA1~G1にデータがあり、これをSheet1のB1~B7に縦にコピーします。 単純にコピーならばペーストでできますが、Sheet2のデータの変更をSheet1に反映できるように関数でSheet1に入力しようとしていますが関数がうまく見つかりません。 Sheet1には、Sheet2の行は固定で列を移動させて反映するような関数で考えていますが、いい関数があるでしょうか。 うまく表現できているか不安ですが、ご教授いただければと思います。

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

    お世話になります。 1)マクロの方法で以下のようにしたいのですが可能でしょうか? 1行目にオートフィルタがかかっていればAAの処理をし、もしオートフィルタがかかっていないのであればBBの処理をしなさい。 というようなマクロです。if~then~else をつかってすると思うのですが、どうもうまくいきません。 2)関数もしくは式を使って以下のようにしたいのですが可能でしょうか?(ほかに方法があるのであれば関数、式にこだわりません) エクセルのデータベース(A1:E100のデータとし、A1:E1は項目が入っており、A1:E1にオートフィルタをかける)からオートフィルタをかけて項目を絞るのですが、出てきた結果の1番上、つまりA2:E2にあるB2とD2の結果を別のシートにある結果欄それぞれ2箇所にコピーする。多分別シートにある結果欄に何らかの関数とか式を入れればいいのかなと思いますが・・・ ちなみに上記2つの質問は関連性はありません。 わかりにくい質問で申し訳ありませんが、必要ならば補足いたします。 かなり困ってますのでよろしくお願いします。

  • エクセルの参照行の挿入による追加と行の削除に対応できる関数を教えてくだ

    エクセルの参照行の挿入による追加と行の削除に対応できる関数を教えてください。 sheet1を印刷用ページ、sheet2をデータ用ページとしています。 sheet2は頻繁に追加や削除をするのですが、単純な =sheet1!A1 ですと、 sheet2に追加してもsheet1に追加されたデータが反映されない。 sheet2の行を1つでも削除するとsheet1のその行は#REF!というエラーに。 という状態です。下記内容に対応できる関数はあるでしょうか。 sheet2がこのような時 行  A あ B い C う D え sheet2Dに「お」を挿入すると sheet1がこのようになるように。 行  A あ B い C う D お E え また、B行を削除したらsheet1が 行  A あ B う C え となるように。 そして、可能ならばコピーのドラッグで複製できるようにしたいのですが・・・ 条件が色々ありますが、よろしくお願いします。

  • エクセル関数

    二つの条件から抽出する関数INDEXとMATCHをつかって作ってみたのですが行と列からの抽出ではなく二つの列からの抽出を行いたいと思います。 シート1 (データが既に入っております。)    A   B   C 1 \100 a123 tana 2 \200 h456 taka 3 \120 k789 yogi 4 \250 b456 ume シート2    A   B   C 1  k789 yogi シート2のC列に¥120と抽出する関数をご教授ください。 宜しくお願いいたします。

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

    エクセル OFFSET関数について 以下のようなシートを2枚作成し、照合したいと考えています。 上段がシート1で、下段がシート2です。 2枚のシートの内容は同じようなものですが、セルの位置が 2枚ともバラバラで、できればROWS COLUMS関数を使って 照合したいと思いますが、二つの関数の使い方がよくわかりません。 照合の仕方は、シート1のデータをシート2をコピーした3枚目のシート(セルはすべて空欄) を作成して、そこにコピーしていきたいです。 一番左端の喫茶店の行番号、列番号を関数の中でどう設定すれば、3枚目のシートができて、 簡単に下までオートフィルできるのでしょうか。 1月31日までデータが入っているので、一つ一つ数式を入れていくのは大変です。 お願いします。

  • エクセル コピー先に残った関数のある行クリア

    エクセルのコピー元シート:100行10列 コピー先シート:ペーストする先 セル10 関数5 N行(例えば150行) コピーした後にデータが張り付いていない行に関数だけ残る(50行) この不要な行の関数を毎回手でクリアしています。 マクロで関数を消すにはどうすればよろしいかご教示願いたく、 よろしくお願いいたします。