• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:EXCELを使って特定の文字を参照、コピーしたい)

EXCELで特定の文字を参照、コピーしたい

このQ&Aのポイント
  • EXCELを利用して、特定の文字を参照し、コピーしたいと考えています。
  • エクセルの表には会員番号、商品名、区分、回数の4列がありますが、一部のセルが欠けています。
  • 同じ会員番号の行で回数1のセルの内容を、空白のセルにも反映させたいです。

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

  • ベストアンサー
noname#204879
noname#204879
回答No.2

1.表内の任意のセルを選択 2.[編集]→[ジャンプ]→[セル選択]を実行 3.“アクティブセル領域”に目玉を入れて[OK]をクリック この結果を Fig-1 に示す。 4.ステップ2を実行 5.“空白セル”に目玉を入れて[OK]をクリック この結果を Fig-2 に示す。 6.アクティブセル B3 内に式 =B2 を入力して、(まだ Enterキーは押さない!) この結果を Fig-3 に示す。 7.Ctrl キーを抑えたままで、Enter を「エイヤッ!」と叩き付け この結果を Fig-4 に示す。 8.列B、Cを選択して、[コピー]→[値の貼り付け]を実行

その他の回答 (4)

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.5

>15万行あるのですが、想定1000行でいただいていますが、15万行でも動きますでしょうか。 動きません。 2桁多いデータ量です。 データが会員番号と回数で昇順にソートされていれば回答No.1が適切な方法です。 取引の日付順等で不揃いのときはソートしてジャンプを使うか、1000行程度に分割して処理されると良いでしょう。

mcdone
質問者

お礼

限界があるんですね。承知いたしました。

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.4

>列が1つ追加した場合にはどうすればいいのでしょうか。 序なので、行数が増えた時や途中に空欄の行が有るときの対策も含めて提示させて頂きます。 Sheet2!A2=IF(COUNTA(Sheet1!$A$2:$A$1001)>=ROWS($A$2:$A2),TEXT(INT(SMALL(INDEX(Sheet1!A$2:A$1001+Sheet1!E$2:E$1001*0.01,0),ROWS(A$2:A2)+COUNTBLANK(Sheet1!$A$2:$A$1001))),"0"),"") Sheet2!E2=IF(COUNTA(Sheet1!$A$2:$A$1001)>=ROWS($A$2:$A2),ROUND(MOD(SMALL(INDEX(Sheet1!A$2:A$1001+Sheet1!E$2:E$1001*0.01,0),ROWS(E$2:E2)+COUNTBLANK(Sheet1!$A$2:$A$1001)),1)*100,0),"") Sheet2!B2=IF(COUNTA(Sheet1!$A$2:$A$1001)>=ROWS($A$2:$A2),IF($E2=1,INDEX(Sheet1!B$1:B$1001,SUMPRODUCT((Sheet1!$A$2:$A$1001=$A2)*1,(Sheet1!$E$2:$E$1001=$E2)*ROW(B$2:B$1001))),B1),"") Sheet2!b2を右へD2までコピーし、Sheet2!A2:E2を下へ必要数コピーします。 尚、処理対象範囲はSheet1!2:1001(行番号2~1001)の1000行です。 また、1つの会員番号について回数は1~99の範囲を想定しています。 各数式でデータをどのように処理しているかを理解すれば行数や列数が増減したときにご自身で対応できるようになりますので、この際、数式のコピペで済ませないようにしてください。

mcdone
質問者

お礼

ありがとうございます。検証します。

mcdone
質問者

補足

15万行あるのですが、想定1000行でいただいていますが、15万行でも 動きますでしょうか。 ※先ほど試したら「応答なし」になっていまいました (悲しい)。 ※いただいているロジックは正しいようです。 > ジャンプの方(先の投稿)は問題なかった。

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.3

>エクセルの数式内で一発でできるのではとおもうのですが、可能でしょうか。 ご提示の模擬データがSheet1としてSheet2へ空欄無しの表にしたいのでしょうか? 1つの数式を右と下へコピーすれば良いと言う訳にはいかないようです。 会員番号は文字列として検証してみます。 Sheet2!A2=TEXT(INT(SMALL(INDEX(Sheet1!A$2:A$10+Sheet1!D$2:D$10*0.01,0),ROWS(A$2:A2))),"0") Sheet2!D2=ROUND(MOD(SMALL(INDEX(Sheet1!A$2:A$10+Sheet1!D$2:D$10*0.01,0),ROWS(D$2:D2)),1)*100,0) Sheet2!B2=IF($D2=1,INDEX(Sheet1!B$1:B$10,SUMPRODUCT((Sheet1!$A$2:$A$10=$A2)*1,(Sheet1!$D$2:$D$10=$D2)*ROW(B$2:B$10))),B1) Sheet2!B2を右に1つコピーし、Sheet2!A2:D2を下へ必要数コピーします。 検証にはご提示の見出しの1行と2~10行のデータのみを対象に数式を構成しました。 データは会員番号がランダムに配置されていても昇順に抽出されます。

mcdone
質問者

お礼

ありがとうございます。 MackyNo1さんのやり方で問題ないようにおもえるのですが、、、 検証してみたいです。 しかし列が増えまして、 会員番号(A列) 商品名(B列) 区分(C列) チャネル(D列)  回数(E列) の表で、かつ B、C、Dが空白については、 同じ会員番号&回数1の記載をそのまま反映するとしたいです(1つ列が追加となった)。 この状態で検証するためにはどのようにすればいいのでしょうか。 > Sheet2!A2=TEXT(INT(SMALL(INDEX(Sheet1!A$2:A$10+Sheet1!D$2:D$10*0.01,0),ROWS(A$2:A2))),"0") Sheet2!D2=ROUND(MOD(SMALL(INDEX(Sheet1!A$2:A$10+Sheet1!D$2:D$10*0.01,0),ROWS(D$2:D2)),1)*100,0) Sheet2!B2=IF($D2=1,INDEX(Sheet1!B$1:B$10,SUMPRODUCT((Sheet1!$A$2:$A$10=$A2)*1,(Sheet1!$D$2:$D$10=$D2)*ROW(B$2:B$10))),B1) ↑ 列が1つ追加した場合にはどうすればいいのでしょうか。 先の2つのジャンプについては列が増えても問題なく対処できています。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.1

Ctrl+Shift+:のショートカット操作で、4列のデータ範囲を選択して、Ctrl+Gでジャンプダイアログを出して「セル選択」で「空白セル」にチェックを入れ「OK」して、画面上部の数式バーに「=」と入力し、アクティブセル(画面左上の名前ボックスに表示されているセル番地、例示のデータならB3セル)の1つ上のセル(例示のデータならB2セル)を選択して「=B2」、のような数式を入力し、Ctrlキーを押しながらEnterしてください。

mcdone
質問者

お礼

>の1つ上のセル 最初の空白の直上を参照させる・・ですね。 わかりやすいです。 あるがとうございます!!!!!!!!!!!!!!!!

関連するQ&A