Excel隣接しない列に値貼り付け 一発でできる方法!

このQ&Aのポイント
  • Excelで隣接しない列に値を貼り付ける方法について解説します。現在の作業工程や問題点についても詳しく説明します。
  • 20~30のシートに分かれているデータを1つのシートに集約する際、条件に基づいて値を貼り付けたい場合の方法を考えます。
  • 現在の作業工程では問題はありませんが、作業を効率化し、不特定多数の人が使いやすいようにするにはどうすれば良いでしょうか。
回答を見る
  • ベストアンサー

Excel 隣接しない列に値貼り付け

Excel 隣接しない列に値貼り付け ※「Excel 隣接しない列に一発で値貼り付け」の書き直しです。 ある一定の書式にしたがって作成された20~30のシートのデータを1つのシートに集約しており(集約シートを含み全てのシートは同じデータ内です。)、データを集約した集約シートの「表A」は下記の添付画像左側のようになります。 やりたいことは、「表A」のB列、C列、D列、E列をある条件のもとに右側の「表B」のH列、J列、L列、N列に値の貼り付けを行いたいのです。 現在の作業工程は、C列の空白行は必要ないため(C列が空白=他の列も空白)C列に文字入力があるとチェックが入るA列のオートフィルターで、「○」のみ表示にし、B~E列を順にそれぞれ、2行目からデータが記載された最終行までコピーし 「表B」のそれぞれの箇所に値貼り付けを行っています。 この時の注意点として、A列のオートフィルタ利用のためC列には空白がありませんが、B、D、E列には空白が存在します。 データがある最終行以下の空白は必要ありませんが、データ間の空白には意味があります。(下記の図で示すと「B3、4」や「D3、4」) 現在の作業工程でも問題はないのですが、この作業は最初に記載した20~30のシートに記載されたデータの校正に使うため取りこぼしをしたくなく、不特定多数の方が簡単に使えるようにしたいので、どうにか作業工程を減らしたいと考えています。 よろしくお願いします。 ▼書式シート *シートの数は増減する。 *集約シートが参照するセルには、必ずデータが入力されているわけではない。 *入力データは全て数値ではなく文字である。 ▼集約シート *他のブックと共通使用なため、一部の式は他のブックへのコピーに対応する形である。 *空白セルを参照している場合に結果として返される「0」は、オプション設定で非表示にて対応 *「表A」の行長は増減する。 *貼り付け先「表B」の列は飛び飛びである。 ▼ちなみに「表A」に使われている計算式(実際とは一部変えています) ■A列  :C列に文字入力がある場合「○」が表示されます     {=IF(OR($C1>""),"○","")} ■B-E列:他のシートの任意のセルの値をコピー     {=IF(ISERROR(INDIRECT("'シート名'!セル")),"",INDIRECT("'シート名'!セル"))} PC環境:Win XP / Excel 2003

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

  • ベストアンサー
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.6

NO3です。 >ちなみに「shift+ctrl+enterキーを同時押下」にはどんな意味があるのですか?  ⇒配列数式の宣言です。   配列(複数の行、列で構成されるデータ)に対して1つの数式で結果を得る事ができます。     例えば、SUM関数は指定範囲を計数しますが、A1:B5範囲でA列に「○」がつく、B列の合算は  =SUM(IF(A1:A5="○",B1:B5))になります。  一般的にSUMIF関数を選択すると思いますが、SUMとIF関数で同様の結果を得ることができます。

15daifukufuku
質問者

お礼

ありがとうございます。 「配列数式」初めて聞く言葉でした。(初心者すぎますね >_<;) 教えていいただいた内容をより理解するべく、調べているところです。 かなり難しそうですが、使いこなせると作業の幅が広がりそうですね。 ちなみに現時点で分かった事は、配列数式の宣言を行うと、数式の前後に”{ }”がつくことと、作業用の列を使わないで計算できたりすことのみです。先は長いです… 大変勉強になりました。ありがとうございます。

その他の回答 (5)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.5

 すみません、ANo.2の数式で、マイナス記号が1ヶ所抜けておりました。 [誤] =IF(ROWS($2:2)>COUNTIF($C:$C,"><")-COUNTIF($C$1:$C$1,"><"),"",INDEX($C:$C,SUMPRODUCT(ROW(OFFSET($C$2,,,MATCH("゜",$C:$C,-1)))*(OFFSET($C$2,,,MATCH("゜",$C:$C,-1))<>"")*(COUNTIF(OFFSET($C$2,,,ROW(OFFSET($C$2,,,MATCH("゜",$C:$C,-1)))ROW($C$1)),"><")=ROWS($2:2))))) [正] =IF(ROWS($2:2)>COUNTIF($C:$C,"><")-COUNTIF($C$1:$C$1,"><"),"",INDEX($C:$C,SUMPRODUCT(ROW(OFFSET($C$2,,,MATCH("゜",$C:$C,-1)))*(OFFSET($C$2,,,MATCH("゜",$C:$C,-1))<>"")*(COUNTIF(OFFSET($C$2,,,ROW(OFFSET($C$2,,,MATCH("゜",$C:$C,-1)))-ROW($C$1)),"><")=ROWS($2:2)))))  それから、他の列に対して、同様のパターンで変更した数式は以下の通りです。 H2セルの数式 =IF(ROWS($2:2)>COUNTIF($C:$C,"><")-COUNTIF($C$1:$C$1,"><"),"",INDEX($B:$B,SUMPRODUCT(ROW(OFFSET($C$2,,,MATCH("゜",$C:$C,-1)))*(OFFSET($C$2,,,MATCH("゜",$C:$C,-1))<>"")*(COUNTIF(OFFSET($C$2,,,ROW(OFFSET($C$2,,,MATCH("゜",$C:$C,-1)))-ROW($C$1)),"><")=ROWS($2:2))))) L2セルの数式 =IF(ROWS($2:2)>COUNTIF($C:$C,"><")-COUNTIF($C$1:$C$1,"><"),"",INDEX($D:$D,SUMPRODUCT(ROW(OFFSET($C$2,,,MATCH("゜",$C:$C,-1)))*(OFFSET($C$2,,,MATCH("゜",$C:$C,-1))<>"")*(COUNTIF(OFFSET($C$2,,,ROW(OFFSET($C$2,,,MATCH("゜",$C:$C,-1)))-ROW($C$1)),"><")=ROWS($2:2))))) N2セルの数式 =IF(ROWS($2:2)>COUNTIF($C:$C,"><")-COUNTIF($C$1:$C$1,"><"),"",INDEX($E:$E,SUMPRODUCT(ROW(OFFSET($C$2,,,MATCH("゜",$C:$C,-1)))*(OFFSET($C$2,,,MATCH("゜",$C:$C,-1))<>"")*(COUNTIF(OFFSET($C$2,,,ROW(OFFSET($C$2,,,MATCH("゜",$C:$C,-1)))-ROW($C$1)),"><")=ROWS($2:2)))))  尚、上記の修正は、値の表示欄よりも上にあるセルの中に、空欄ではないセルが在るか否かによって、セルの参照先がずれる事に、対処するためのものです。 >ご提示頂いた数式を入力下のですが、何も表示されません。 の件に関しては、当方のパソコン上で、表示が行われている事を確認した上で、投稿しておりますので、明確には解りませんが、もしかして、写された数式の冒頭部分が =IF(ROWS($2:2)>COUNTIF($C:$C,"><")-COUNTIF($C$1:$C$1,"><"),"", ではなく =IF(ROWS($2:2)>COUNTIF($C$1:$C$1,"><"),"", になっては、おられないでしょうか?

15daifukufuku
質問者

お礼

何度もご対応ありがとうございます。 表の構造、列の配置、は質問内容とまったく同じで、シートも同一シート内ですが、やはりまったく表示しませんでした。 ご回答頂いた式をコピーした後、式を1つ1つ確認したのですが、違いはありませんでした。たぶん私の側の問題だと思うのですが原因は分かりませんでした。 (新しいシートに表を再作成してトライしましたが結果は同じでした。) 折角ご対応いただいたのに、使いこなせずすみません。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

 回答番号:ANo.2です。 >ご提示頂いた数式を入力下のですが、何も表示されません。  表A及び表Bの各々において、表中の値が表示欄(空欄も含む、項目名欄は含まず)が始まる行番号が、画像の場合と、実際の場合が、異なっているという事は、御座いませんでしょうか?  或いは、実際には表Aと表Bが異なるSheetになってはいないでしょうか?  もしも、画像の場合と、実際の場合で、異なっている場合には、原因となる可能性も無きにしも非ずですから、念のために、データの表示欄(空欄も含む、項目名欄は含まず)が始まる行番号やSheet名を、御教え頂く訳にはまいりませんでしょうか?  それから、質問者様が仰るものとは別の不具合が御座いましたので、J2セルに入力する数式を以下の様に変更された上で、他の列に関しましても、同様のパターンで変更願います。 =IF(ROWS($2:2)>COUNTIF($C:$C,"><")-COUNTIF($C$1:$C$1,"><"),"",INDEX($C:$C,SUMPRODUCT(ROW(OFFSET($C$2,,,MATCH("゜",$C:$C,-1)))*(OFFSET($C$2,,,MATCH("゜",$C:$C,-1))<>"")*(COUNTIF(OFFSET($C$2,,,ROW(OFFSET($C$2,,,MATCH("゜",$C:$C,-1)))ROW($C$1)),"><")=ROWS($2:2)))))

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.3

NO1です。 回答の通りに数式入力完了時にshift+ctrl+enterキーを同時押下していないからだと思います。 現在の状態でH2を選択→F2キー押下→shift+ctrl+enterキーを同時押下、H2を下方向にコピーして下さい。

15daifukufuku
質問者

お礼

再度、ご回答ありがとうございます。 >回答の通りに数式入力完了時にshift+ctrl+enterキーを同時押下していないからだと思います。 その通りでした。 全ての列において正しく表示されました!ありがとうございます。 本当にお騒がせしてすみませんでした。 ちなみに「shift+ctrl+enterキーを同時押下」にはどんな意味があるのですか? もしよろしければご教授お願いいたします。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 御質問内容が解り難かったため、確認したいのですが、 「C列に文字列データが入力されている行の、B列、C列、D列、E列の値を、それぞれH列、J列、L列、N列に反映させ、その際には、J列の途中に空欄が無い様に、H列、J列、L列、N列に関しては、行を詰めて表示させる」 だけであると考えて宜しいのでしょうか?  もしも、そうであれば、以下の様な方法があります。(A列無しで処理可能です)  まず、J2セルに次の数式を入力して下さい。 =IF(ROWS($2:2)>COUNTIF($C:$C,"><")-COUNTIF($C$1:$C$1,"><"),"",INDEX($C:$C,SUMPRODUCT(ROW(OFFSET($C$2,,,MATCH("゜",$C:$C,-1)))*(OFFSET($C$2,,,MATCH("゜",$C:$C,-1))<>"")*(COUNTIF(OFFSET($C$1,,,ROW(OFFSET($C$2,,,MATCH("゜",$C:$C,-1)))),"><")=ROWS($1:2)))))  尚、この数式中の"゜"の部分は半濁点ですが、入力される筈が無い文字列であれば何でも構いません。 MATCH("゜",$C:$C,-1) の部分で、存在しない文字列データが入力されているセルの位置を探す事で、最下段の行を特定しています。  ですから、"は゜"や"ヒ゜"等は構いませんが、"゜"の様に半濁点を単独で、C列のセルに入力すると、正常な動作が出来ませんから、注意して下さい。  次に、J2セルをコピーして、J3以下に貼り付けて下さい。  次に、J2セルに入力した数式中のINDEX関数の範囲を、$C:$Cから$B:$Bに変更した、次の数式をH2セルに入力して下さい。 =IF(ROWS($2:2)>COUNTIF($C:$C,"><")-COUNTIF($C$1:$C$1,"><"),"",INDEX($B:$B,SUMPRODUCT(ROW(OFFSET($C$2,,,MATCH("゜",$C:$C,-1)))*(OFFSET($C$2,,,MATCH("゜",$C:$C,-1))<>"")*(COUNTIF(OFFSET($C$1,,,ROW(OFFSET($C$2,,,MATCH("゜",$C:$C,-1)))),"><")=ROWS($1:2)))))  続いて、H2セルをコピーして、H3以下に貼り付けて下さい。  次に、J2セルに入力した数式中のINDEX関数の範囲を、$C:$Cから$D:$Dに変更した、次の数式をL2セルに入力して下さい。 =IF(ROWS($2:2)>COUNTIF($C:$C,"><")-COUNTIF($C$1:$C$1,"><"),"",INDEX($D:$D,SUMPRODUCT(ROW(OFFSET($C$2,,,MATCH("゜",$C:$C,-1)))*(OFFSET($C$2,,,MATCH("゜",$C:$C,-1))<>"")*(COUNTIF(OFFSET($C$1,,,ROW(OFFSET($C$2,,,MATCH("゜",$C:$C,-1)))),"><")=ROWS($1:2)))))  続いて、L2セルをコピーして、L3以下に貼り付けて下さい。  次に、J2セルに入力した数式中のINDEX関数の範囲を、$C:$Cから$E:$Eに変更した、次の数式をN2セルに入力して下さい。 =IF(ROWS($2:2)>COUNTIF($C:$C,"><")-COUNTIF($C$1:$C$1,"><"),"",INDEX($E:$E,SUMPRODUCT(ROW(OFFSET($C$2,,,MATCH("゜",$C:$C,-1)))*(OFFSET($C$2,,,MATCH("゜",$C:$C,-1))<>"")*(COUNTIF(OFFSET($C$1,,,ROW(OFFSET($C$2,,,MATCH("゜",$C:$C,-1)))),"><")=ROWS($1:2)))))  続いて、N2セルをコピーして、N3以下に貼り付けて下さい。  以上です。

15daifukufuku
質問者

お礼

お手数取らせてすみません。 ご回答ありがとうございます。 ご提示頂いた数式を入力下のですが、何も表示されません。下方にコピーしてもどの列も表示なしのままです。エラーも出ず、表示もされないので原因がまったく分かりません。 また、"゜"の部分も使用していない他の文字に置き換えてみましたが何も起こりませんでした。なぜなんでしょうか??

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

一例です。 以下の数式を設定、入力完了時にshift+ctrl+enterキーを同時押下、下方向に必要分コピーして下さい。 H2は=IF(COUNTIF($A:$A,"○")>=ROW(A1),INDEX(B:B,SMALL(IF($A$2:$A$65536="○",ROW($A$2:$A$65536),10^6),ROW(A1))),"") 以降は上記数式の「INDEX(B:B」部分の列番号をそれぞれの参照したい列番号に変更して適用して下さい。

15daifukufuku
質問者

お礼

早々のご回答ありがとうございます。 説明下手ですみません。 そうです!A列に「○」が付いているB~E列を貼り付けたいんです。 ご理解頂き感謝いたします。 >以降は上記数式の「INDEX(B:B」部分の列番号をそれぞれの参照したい列番号に変更して適用して下さい。 早速H列以下に入力いたしました。 結果、H列は下方向にコピー後に上手く表示されたのですが、J列、L列、N列は2行目は表示されるもののそれ以後は「#NUM!」のエラーが表示されます。でも、2行目だけはどの列も正しく表示されます。 「表A」に入っている数式のせい?でも2行目だけOKっておかしいですよね?

関連するQ&A

  • Excel 隣接しない列に一発で値貼り付け

    Excel 隣接しない列に一発で値貼り付け 隣接する列に表示されたデータを、同じシートの隣接しない列に一発で値の貼り付けがしたいのですが、可能でしょうか?   A     B     C    D    E         1 チェック タイトル 名前1  名前2 説明 2 ○    野菜   人参   牛蒡  これは根菜類 3 ○          胡瓜       うり科の野菜です 4 5 ○    果物   バナナ  柿   暖色系の色です   G       H         I     J           K     …… 1 計算式   B列を値貼り付け 計算式   C列を値貼り付け  計算式  …… ■A列  :C列に文字入力がある場合「○」が表示されます     {=IF(OR($C1>""),"○","")} ■B-E列:他のシートの任意のセルの値をコピー     {=IF(ISERROR(INDIRECT("'シート名'!セル")),"",INDIRECT("'シート名'!セル"))} *C列の空白の場合は全ての列が空白である(A列の式はそのため) *C列に文字がある場合のB、D、E列の空白には意味がある。 *コピーではなく値の貼り付けを行いたい。 *貼り付け左記の列は飛び飛びである。 *行の長さは可変する。 今までは、A列を「オートフィルタ」で「○」のみ表示させ、B-E列を1列づつH、J、L、N列へ貼り付けていました。マクロもいろいろ考えたのですが、初心者のため応用が出来ません。 関数でもマクロでも頑張ってトライしますのでお知恵を頂けますでしょうか。 PC環境:Win XP / Excel 2003

  • 行挿入+貼付けと空白行削除を同時に行うには?

    行挿入+貼付けと空白行削除を同時に行うには? VBA初心者です。 仕事でエクセルを使っていますが、 no  工程1 工程2 工程3 1   A   B   C 2   B   _   A 3   C   A   _ 4   _   C   A という表を no  工程 1   A     B     C 2   B     A 3   C     A 4   C というように並び替えたいのですが、 現在は各番号ごとに3行挿入して工程をコピー、行と列を入れ替えて貼付けをしています。 これだと no  工程 1   A     B     C 2   B      A 3   C     A 4     C     A のように空白行ができてしまいます。これをもう一度、マクロで消しているのですが、 データ量が多いため、行挿入と空白行を消す作業を同時に行わないとシート最大行数である 65536行を超えてしまう可能性があります。 同時にやるにはどのようにすればよいのでしょうか? よろしくおねがいします。

  • 値のみの貼り付けなのですが…。

    シート間での値の貼り付けをしたいのですが教えて下さい。宜しくお願いします。 例えば、A社・B社・C社・集計シートがあった時、まずA社の数式の入っているセルB10・E10・G10の数値を集計シートのC4・C5・C6のセルに値のみ貼り付けて、次の行にB社、また次の行にC社をと上書きでなく、データが追加されるようにしたいのですが、できますでしょうか?

  • エクセルのワークシート関数でA、B列不同数取得

    エクセルのワークシートA列とB列にデータがあります。 データは数値、文字列、空白です。エラー値はありません。 A列のセルと同じ行のB列のセルの値が同一でないA列データの個数(またばB列データの個数)を求めるワークシート関数はないでしょうか?(空白同士は同一とみなします。) C列などに作業列を作ってA、Bの比較をして求める方法はすぐに思いつきますが、作業列なしで求めたいのです。

  • 値の貼り付けとcounta関数(空白をカウント)

    A1 1 A2 a A3 a A4 1 A5 a 上記のデータがあります。(aは任意の文字列、1は数字の1のみ) 1.B列に、「=IF(A1=1,"",A1)」を入力。(1を消すためです) 2.C列に、B列をコピー、形式を選択して値を張り付け。(値のみをカウントするため) 3.C6に「=COUNTA(C1:C5)」を入力。計算結果=5。 空白以外のセルをカウントして欲しいので、COUNTA関数用いたのに、 空白もカウントされてしまいます。 なお、手作業で空白セル(C1)をデリートすると、計算結果は「4」になります。 計算結果として「3」を表示させる方法をご教授ください。 (データは8000件以上あり、手作業での空白セルのデリートは不可能です) あるいは、違ったやり方での正しい計算結果の出し方があれば、お願いします。 D列に「=CLEAN(B1)」「=SUBSTITUTE(B1," ","")」を入力、E列へ値の貼り付け、もE6のCOUNTAの結果は5になります。(当然D6も) 以上、よろしくお願いいたします。 環境:エクセル2000 XP Pro

  • エクセルの貼り付けについて

    シート1には  A B 1あ い 2う  3え お という表があります シート2には  C 1か 2き  という表があります シート1の2行目はしばらく使わないので 非表示にして Cの列をコピーして貼り付けをしたところ 2行目に「き」と入力されてしまいました このきを3行目に表示させるコピー&ペーストの方法ありませんか? エクセル2016使用

  • EXCELで範囲内にある値を検索してA列の値を返す

    タイトル通りなのですが、OSはXPでEXCEL2000を使用しています。 シート内ですが 1.A列には文字列が入っています。200行まで空白は無いです。 1.B列からL列の200行までに数字がランダムに入っています。 2.数字は1~500までです。 3.行によってはL列まですべてのセルに値が入ってません。  数字の入っていないセルは空白です。 4.数字の重複はありません。 やりたいことは 別のシートのA列に1~500までの数字を入れ、B列に上記範囲の中からその数字を検索して、その行のA列の値を返したいのですが、出来ません。 どの関数を組み合わせれば出来るのでしょうか? vlookupの検索範囲は1列だけなのでダメでした。 よろしくお願いします。

  • エクセル 固定されたセルを列が変更されるセルに貼り付ける

    エクセルで月の売上を年の売上表に転記したいと思っています。 シート1のA1に入っている月の売上の値をシート2のA1に貼り付け、 翌月にシート1のA1に更新された値(翌月の売上)をシート2のB1に貼り付けという様に、シート1の固定されたセルを(値は変更)シート2の列が変更されるセル(行は固定)に値を貼り付ける方法を教えてください。 シート1のA1からシート2のC1に貼り付け・・・と上記を繰り返し12回貼り付けが終わった時点でシート2のA1:L1を空白にし、次回貼り付けられるセルがシート2のA1に戻るようにしたいです。 ちなみにコマンドボタンにマクロを登録し使おうと思います。 どなたかご教示お願いします。 できたらそのまま使えるマクロを作っていただけると嬉しいです。 当方初心者です。 宜しくお願いします。

  • エクセル 「値貼り付け」の結果が

    Excel2003を使用しています。 【準備】 ・セル"A3"に ="" と入力します。(何も表示されない状態) ・セル"A3"をセル"B3"に値貼り付けをします。 【操作】 この状態でセル"B6"を選択し、End(xlUp)【Endを押した後、↑を押す】を行います。 【結果】 何もデータが無い筈のセル"B3"にひっかかってしまいます。 一度セル"B3"で「F2」を押し「Enter」を押すと、ひっかからなくなります。 データが1つだけの簡単な例なのですが、 A列からB列に値貼り付けした中で、 データの入っているセルのみEnd(xlUp)に引っかかるようにする簡単な方法はないでしょうか。

  • シート1のC列の最終行をコピーして同じ行に値貼り付けしたい

    シート1のC列の最終行を取得して その行を丸々値貼り付けするマクロを作りたいと思います。 シート3のB18の値をシート1のC列の最終行の1つ下のセルに値貼り付け すると、その行のA、B列に日付が入力される関数が入っています。(下まで) 関数が入ったままだと、うまくいかない時があるので最終行をコピーして値貼り付けしたいのですが、マクロの作り方を教えてください。 シート1の最終行に貼り付け Sheets("Sheet3").Select Range("B18").Select Selection.Copy Sheets("Sheet1").Select Range("C65536").End(xlUp).Offset(1).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False End Sub 最終行をコピーして値貼り付け Dim 最終行 As Integer 最終行 = Range("C65536").End(xlUp).Row Range("A6:C" & 最終行).Select Selection.Copy Sheets("Sheet1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False End Sub このマクロだと、A6からC列の最終行まで全てコピーされてしまうので、C列の最終行のAからC列まで1行だけコピーできないでしょうか?

専門家に質問してみよう