• 締切済み

関数でなんとかなりませんか?(EXCEL)

マクロや関数に関してはあまり知識がありません。 そこでお教えいただきたいことがあり、質問させていただきました。 まず、あるワークシートに以下のような表があります。 A列|B列 a   1 b   1 c   1 d   2 e   2 この表を新しいワークシート(ワークシート名:並べ替え)以下のように並べ替えたいと思っています。 A列|B列|C列|D列 1   a   b   c 2   d   e 要するに、B列の値を認識して値が同じものを1行目に横並びにしたいのです。 関数やマクロでなんとかなりませんか? 膨大なデータがあるので手作業でやるととてもしんどいですし、間違いがでやすくなり困っています。 お願いいたします。

みんなの回答

noname#204879
noname#204879
回答No.3

「以下のような表」の左上隅の位置が Sheet1 のセル A1 とします。 1.Sheet1 のセル C1 に式 =COUNTIF(B:B,ROW(1:1)) を入力して、此れを下方に(当   該式の値が 0 になるまで)ズズーッと複写 2.Sheet2 のセル B1 に次式を入力し、此れを右方に好きなだけ(*1)ズズーッと複写   =IF(COLUMN(A:A)>Sheet1!$C1,"",OFFSET(Sheet1!$A$1,COLUMN(A:A)-1,0)) 3.Sheet2 のセル B2 に次式を入力し、此れを右方に(ステップ2と同じだけ)好き   なだけ(*1)ズズーッと複写   =IF(COLUMN(A:A)>Sheet1!$C2,"",OFFSET(Sheet1!$A$1,COLUMN(A:A)+SUM(Sheet1!$C$1:$C1)-1,0)) 4.ステップ3で式を埋め込んだ範囲(B2 から右端まで)を選択して、此れを下方に   ズズーッと複写 *1: 「好きなだけ」とは、1行あたりのデータの最大個数以上の列数だけ、という意味

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

こんな感じでどうでしょう?標準モジュールにコピペして下さい 一番左に元データのシートがあると仮定しています。 Sub test() Dim i As Long 'sheet1の行数カウンタ Dim j As Long 'Sheet2の行番号カウンタ Dim m As Long 'Sheet2の列番号カウンタ Dim k As Long 'Sheet1のセルの値を一時記憶   'Sheet(2)をクリア   Worksheets(2).Select   Cells.Select   Selection.ClearContents      'Sheet(1)をソートして整列 (余計なお世話?かも)マクロの記録より   Worksheets(1).Select   Columns("A:B").Select   Selection.Sort _     Key1:=Range("B1"), Order1:=xlAscending, _     Key2:=Range("A1"), Order2:=xlAscending, _     Header:=xlGuess, OrderCustom:=1, _     MatchCase:=False, _     Orientation:=xlTopToBottom, _     SortMethod:=xlPinYin, DataOption1:=xlSortNormal, _     DataOption2:=xlSortNormal      '変数初期値格納   i = 1   m = 1      Do Until Sheets(1).Range("B" & i).Value = ""          '値が変わったら行を一個下へ移動、列位置は元に戻す     If Sheets(1).Range("B" & i).Value <> k Then       k = Sheets(1).Range("B" & i).Value       j = j + 1       m = 1       Sheets(2).Cells(j, m).Value = k     End If          Sheets(2).Cells(j, m + 1).Value = Sheets(1).Range("A" & i).Value     i = i + 1     m = m + 1          If m = 257 Then       MsgBox "列数を超えました"       Exit Sub     End If        Loop      MsgBox "終了" End Sub

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

補足要求です 質問文ではB列は1から始まる数字で、昇順に並び替えされているような例を書いていただいていますが、これは実際のデータもそのルールですか? また補助セルを使用することは許されますか? >膨大なデータ とのことですが、データの行数はどれくらいで、B列の値はいくつくらいになりますか?

vvv_chiho_vvv
質問者

補足

B列の値ですが、昇順に並んでおります。 またA列はB列を基準に昇順に並んでいます。 (B列の値が同じものの中で昇順に並んでいます) 値は001-001のように3桁-3桁の組み合わせになっています。 行数は全部で1150行です。 横並びになればどのようでも結構ですので補助セルの使用はOKです。

関連するQ&A

  • Excelの関数またはマクロを教えて下さい。

    Exsel2000の関数で、現在以下の関数まで出来たのですが、これを応用して検索値「A1」を2つのセル「A1&B1」にしたいのですが、どうすればよいのでしょうか?どなたか方法を教えて下さい。 =VLOOKUP(A1,Sheet1!$A$1:$E$2000,4) 上記の関数から判るように、これは 例えばSheet2のC1のセルにこの式を入れる場合、A1と同じ内容の値を、Sheet1のA列から検索して、そして同じ行のSheet1のD列の値をSheet2のC1のセルに返すという関数です。 これを応用して、「A1と同じ内容…のA1を、A1&B1の2つが一致するセルを検索して、同じ列のSheet1のD列の値をSheet2のC1のセルに返すという関数にしたいのです。 どなたかおわかりになる方がおりました宜しくお願いいたします。 また、マクロを使う方法でも良いのですが、当方マクロは詳しくないので出来るだけ判りやすくお願いいたします。

  • エクセル関数のことで困っています。

    今、簡単な表計算の表を作っていますが、先に進まず困っています。 A1~A200のセルに1~200の番号が昇順で入っています。そしてデータとして,B2,C2,D2,E2 に各々a、b、c、dが入っており,,B3,C3,D3,E3 にa1、b1、c1、d1・・・・・・・・・・・・B200,C200,D200,E200にw,x,y,zのようにB,C,D,E列に適当な数が入っています。 そこで、E列の値で昇順  SMALL(D$1:D$200,A1)  に並べ替え、同時にB,C,D,Eの値も返したいのです。つまりエクセルの並べ替え機能を関数で自動で行いたいのです。 今は、関数の、ROW,SUMPRODUCT,COUNT,INDEX,LARGE,COUNTIF,COLUMN,などを使い関数バーに5行ほどになり、処理にとても時間がかかります。 何とか、簡単で早い計算式はないでしょうか。 よろしくおねがいします。

  • EXCEL関数について

    EXCEL関数について Sheet1、A1~A1000セルに「1~10」までの値がランダムに入力されております。 数字は「グループ1」、「グループ2」・・・という意味です。 B列、B1~B1000セルには「1~4」までの値がランダム入力されております。 B列については、空白のセルもあります。 Sheet2、A1~A10セルに、「1~10」までの値、「グループ1」~「グループ10」までが順に入力されております。 ここで、Sheet2、B列~E列、それぞれの1~10セルを使用し、、 それぞれの「グループ」がSheet1にて「1~4」の値をいくつずつ選んでいるか算出したいのです。 「グループ1」について、「1」のカウントはB1セル、「2」のカウントはC1のセルに返します。 同じように「グループ2」はB2~E2のセルに、「グループ3」はB3~E3のセルに値を返したいのです。 「COUNTIF」等の関数でいろいろと試してみたのですがうまく反映されません。 拙文乱文、大変恐縮ですが、ご教示頂きたく何卒宜しくお願い致します。

  • excel関数教えてください。

    表にしてあって、A列には任意の数字がはいるようなってます。関数はB、C、D列に使いたいのですが B列:Aを3で割り小数点以下に.666が出たときには整数に2を足して、.333の場合は整数に1を足して表示したい。 C列:Aを3で割り小数点以下に.666か.333の場合小数点以下を切り捨てたい D列:Aを3で割り小数点以下に.666か.333の場合小数点以下を切り上げたい 例としては   A   B   C   D 1 10,000 33,334 33,333  33,333 2 20,000 66,668 66,666  66,666 上のような表です。Aに入る数値はいろんな 数値があります。関数に該当しないものは 3で割った数字をそのまま表示したいです。 宜しくお願いします。

  • 関数 各条件により貼り付けるデータを変えたい

    二つのワークシートがあり、各条件により貼り付けるデータを変えたいのですが、IF文等の関数で可能でしょうか。 ワークシートW   A列    B列    C列    D列    E列   G列 1 倉庫   商品1   10円 2       商品2   50円 3 倉庫   商品3   20円 4       商品4   15円 5              17円 ワークシートY   A列     B列    C列 1 if関数(1)  if関数(2)  if関数(3) 2 if関数(4)  if関数(5)  - このデータで、以下のことをしたいのですが、可能でしょうか ワークシートWのA1とB1に文字がある場合、ワークシートYのA1をワークシートWのD1に貼り付ける ※これを同じ条件で、貼り付けるデータを「ワークシートWのE1にワークシートB1を貼り付け」、 「ワークシートWのG1にワークシートWのC1を貼り付け」をしたい また、ワークシートWのA1に文字がないが、B列に文字がある場合、ワークシートY2をワークシートWのD2に貼り付ける ※これを同じ条件で、貼り付けるデータを「ワークシートWのE2=ワークシートYのB2」、 「ワークシートWのG2にワークシートWのC2を貼り付け」をしたい なお、ワークシートYにはIF文が入力されています。 ご存知の方いらっしゃればお願いします。

  • EXCEL関数 一覧から週計データを導き出したい

    Sheet1に1売上商品1行のデータが年間通しで並んでいます。 Sheet2に1日1行の週計データを表示したのですが。 Sheet2の [B2]以下の列に入れる関数 Sheet2の [C2]以下の列に入れる関数 Sheet2の [D2]以下の列に入れる関数 Sheet2の [E2]以下の列に入れる関数 を教えてください。 ================ Sheet1 売上入力表 Sheet2 日別売上集計表 画像添付しています

  • どんな関数を使えばいいでしょう(EXCEL)

    EXCEL2003で以下のような表を作っています。 A2~A13・・1月~12月の月を入れています B1~D1・・・店舗名(店舗A~C)を入れています データは店舗ごと(月毎)の売上が入っています。 E列にその月の最低売上をMIN関数で出しています。 F列にE列で出した最低売上の店舗名を出したいのですが、どのように出したらよいのかわかりません。 なるべく簡単な方法で出したいのですが、どうしたら良いでしょうか? 関数で出すと思うのですが、どんな関数を使えばよいでしょうか? よろしくお願いいたします。

  • Excelですが関数式を教えて下さい。

    Sheet1に下記の表があり、Sheet2では氏名順不同でSheet1のB列,C列と小計。D列,E列の小計,合計の表にしたいのです。理屈は簡単そうですが素人でわかりません。何か良い方法があれば教えて下さい。 Sheet1   A   B   C   D    E   F      1     (1)  (2)  (3)  (4)  合計 2 小泉  25  25  23  24   97 3 福田  23  24  20  22   89 4 阿部  24  22  19  25   90 Sheet2  (1)  (2) 合計 1 阿部  46  44  90 2 麻生   ・  ・  ・ 3 ・

  • Excelでキーを使って関数で列を行に変更したい

    Excelで下記の事を関数で行うことが出来るでしょうか?方法を知っている方がいましたらお教えください sheet1    A B   1 1 33  2 1 33  3 1 34  4 1 45  5 2 21  6 2 25  7 2 25  sheet2    A  B  C  D  E   1  1  33 33 34 45 2  2  21 25 25 Sheet1の状態のキーをA列とした場合に、 Sheet2でキーをA列に入力後 B1 C1 D1 E1 に 関数を使って列でまとまっているデーターを 行にする方法が分かる方、お教え願います。 (Sheet2の B1 C1 D1 E1に入れる関数の 組み方が分からないと言うことです。 また、マクロはわからないので><) よろしくお願い致します。

  • 【Excel】一致するデータの検索

    Excel2003を使用しています。 Sheet1のB列の値がSheet2のA列に入力されている値と一致したら、Sheet1のC列とD列の値をSheet2のC列とD列に表示させたく、VLOOKUP関数を使用したところ、Sheet1のB列とSheet2のA列のデータの並び方(順序)が同じではないためか、VLOOKUP関数ではできませんでした。 こういう場合、マクロで処理することは可能でしょうか?可能であれば、どのようにコードを記述すればいいでしょうか? Sheet1のデータは4行目から、Sheet2のデータは6行目から入力されています。 よろしくお願いします。

専門家に質問してみよう