- ベストアンサー
EXCELで特定の文字を参照、コピーしたい
- EXCELを利用して、特定の文字を参照し、コピーしたいと考えています。
- エクセルの表には会員番号、商品名、区分、回数の4列がありますが、一部のセルが欠けています。
- 同じ会員番号の行で回数1のセルの内容を、空白のセルにも反映させたいです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
その他の回答 (4)
- bunjii
- ベストアンサー率43% (3589/8249)
>15万行あるのですが、想定1000行でいただいていますが、15万行でも動きますでしょうか。 動きません。 2桁多いデータ量です。 データが会員番号と回数で昇順にソートされていれば回答No.1が適切な方法です。 取引の日付順等で不揃いのときはソートしてジャンプを使うか、1000行程度に分割して処理されると良いでしょう。
- bunjii
- ベストアンサー率43% (3589/8249)
>列が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の範囲を想定しています。 各数式でデータをどのように処理しているかを理解すれば行数や列数が増減したときにご自身で対応できるようになりますので、この際、数式のコピペで済ませないようにしてください。
お礼
ありがとうございます。検証します。
補足
15万行あるのですが、想定1000行でいただいていますが、15万行でも 動きますでしょうか。 ※先ほど試したら「応答なし」になっていまいました (悲しい)。 ※いただいているロジックは正しいようです。 > ジャンプの方(先の投稿)は問題なかった。
- bunjii
- ベストアンサー率43% (3589/8249)
>エクセルの数式内で一発でできるのではとおもうのですが、可能でしょうか。 ご提示の模擬データが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行のデータのみを対象に数式を構成しました。 データは会員番号がランダムに配置されていても昇順に抽出されます。
お礼
ありがとうございます。 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)
Ctrl+Shift+:のショートカット操作で、4列のデータ範囲を選択して、Ctrl+Gでジャンプダイアログを出して「セル選択」で「空白セル」にチェックを入れ「OK」して、画面上部の数式バーに「=」と入力し、アクティブセル(画面左上の名前ボックスに表示されているセル番地、例示のデータならB3セル)の1つ上のセル(例示のデータならB2セル)を選択して「=B2」、のような数式を入力し、Ctrlキーを押しながらEnterしてください。
お礼
>の1つ上のセル 最初の空白の直上を参照させる・・ですね。 わかりやすいです。 あるがとうございます!!!!!!!!!!!!!!!!
お礼
限界があるんですね。承知いたしました。