アプリ版:「スタンプのみでお礼する」機能のリリースについて

A列~F列までの文字データを以下のようにA列とB列の2列に移動させたいのですが、いくら考えてもわかりません。データが1000件以上あり、手作業ではミスをしかねないので、何かよい方法はないでしょうか?よろしくお願いします。

(手順)
(1)B~D列のデータを縦に並べる。(B~Fには文字データが入ります。すべての列にデータがあるとは限りませんが、少なくとも、B列には必ずデータがあり、B、C、Dの順にデータが入っています。)
(2)その左側にA列のデータを並べる。


(A列)   (B列) (C列) (D列) (E列) (F列)
000001    10      15    20
000002    5
000003    15     10    5    3     1



(A列) (B列) 
000001  10
000001   15
000001   20
000002   5
000003  15
000003  10
000003   5
000003   3
000003   1

A 回答 (8件)

5列、1行を挿入して下のようにします。

算式のみで行ってみます。

 (A列)(B列)(C列)(D列)(E列)(F列)(G列)(H列)(I列)

2               000001___10____15____20
3               000002____5
4               000003___15____10_____5_____3____1


(1)A1に 1 を入力

(2)A2に =A1+COUNT(G2:IV2) を入力。F列のデータ数分A列下方向にコピーします

(3)B2に =MATCH(ROW()-1,$A$1:$A$4,1)+1 としてB列下方向にコピー
        (※上の$A$4はF列が4行目までの例です)

(4)C2に =COUNTIF($B$2:B2,B2)      としてC列下方向にコピー

(5)D2に =INDEX(F:F,B2)         としてD列下方向にコピー

(6)E2に =OFFSET($F$1,B2-1,C2)     としてE列下方向にコピー

(7)D:E列をコピーして、どこかに形式を選択して貼り付け→値 を実行します。
    • good
    • 0
この回答へのお礼

nishi6さん、いつもありがとうございます。

おかげさまで100%問題を解決することができました。その他の作業を含め、昨日と今日の2日間で、所期の目的を果たすことができました。

作業をしながら、「このような難問に善意で、しかも完璧に答えて下さる方がいるとは」と涙が出そうになりました。

nishi6さんが教えて下さった関数がそれぞれどのような役割を果たすのか今は調べる余裕もありませんが、理解できるように努力したいと思います。

本当にありがとうございました。

お礼日時:2002/11/22 03:32

>#7さんへ



釈迦に説法かもしれませんが、行の操作は Integer でなく Long を使用した方が良いと思います。
この例では問題ないでしょうが、行数によってはオーバーフローします。

Sub Test()
Dim myCnt1 As Integer
Dim myCnt2 As Long
 Range("A32768").Value = 1
 myCnt2 = ThisWorkbook.Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row
 MsgBox "myCnt2 : " & myCnt2
 myCnt1 = ThisWorkbook.Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row
End Sub
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

お礼日時:2002/11/22 03:33

こんばんわ。

シート1にしかデータが入っていないという過程でサンプルマクロを作ってみました。次のように操作してみて下さい。

・データの入力されているブックを開き、ALT+F11キーを押してVBE画面を表示させ、画面左上にVBAProjectと書かれているところにマウスポインターをあわせて右クリック後、挿入→標準モジュールを順にクリックして表示された右側の白い部分に下記のコードをコピーペーストする。

Sub Deta_Seiri()

Dim i As Integer
Dim j As Integer
Dim myCnt1 As Integer
Dim myCnt2 As Integer

myCnt1 = ThisWorkbook.Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row
myCnt2 = ThisWorkbook.Worksheets(1).Cells(1, 1).End(xlToRight).Column
For i = 2 To myCnt1
For j = 2 To myCnt2
If ThisWorkbook.Worksheets(1).Cells(i, j).Value <> "" Then
ThisWorkbook.Worksheets(1).Cells(Rows.Count, 7).End(xlUp).Offset(1, 0).Value = ThisWorkbook.Worksheets(1).Cells(i, 1).Value
ThisWorkbook.Worksheets(1).Cells(Rows.Count, 8).End(xlUp).Offset(1, 0).Value = ThisWorkbook.Worksheets(1).Cells(i, j).Value
End If
Next j
Next i

ThisWorkbook.Worksheets(1).Columns("A:F").Delete

End Sub

・ALT+F11キーを再度押してエクセルの画面にもどり、メニューバーのツール→マクロ→マクロを順にクリックし、出てきたダイアログボックスの右側の実行ボタンをクリックする。

マクロが実行され、貴方様の思い通りの動作が確認できると思います。

ご不明な点・不具合がございましたら、ご遠慮なくなくお知らせ下さい。
    • good
    • 0
この回答へのお礼

kazuhiko5681さん、いつもありがとうございます。

試してみましたが、残念ながらエラーになってしまいました。
今回はnishi6さんの方法で解決しました。

回答ありがとうございました。

お礼日時:2002/11/22 03:37

こんにちは。



コピーブック等のテスト環境で試して下さい。(使用する場合は内容のチェックも)

シートを追加して転記します。

Sub Test()
Dim Ws As Worksheet, mSheet As Worksheet
Dim LRow As Long
 Set mSheet = ActiveSheet
 Set Ws = Worksheets.Add(after:=ActiveSheet)
 For i = 1 To mSheet.Cells(65536, 1).End(xlUp).Row
  For j = 2 To mSheet.Cells(i, 1).End(xlToRight).Column
   LRow = Ws.Cells(65536, 1).End(xlUp).Row + 1
   Ws.Cells(LRow, 1) = mSheet.Cells(i, 1)
   Ws.Cells(LRow, 2) = mSheet.Cells(i, j)
  Next j
 Next i
End Sub
    • good
    • 0
この回答へのお礼

papayukaさん、こんばんは。

返事が遅くなって申し訳ありません。

papayukaさんの作ってくださったマクロでバッチリでした。新しいシートに実行結果が出てくるなんてびっくりしてしまいました。(しかもすごい速さですね。)

ただ、空白のセルも移動してしまうのでその分の削除が必要でした。でも、すごいマクロなので大切に保存しておきたいと思います。

回答ありがとうございました。

お礼日時:2002/11/22 03:29

初めまして。

貴方様のおやりになりたいことはマクロを組めば実にすばやく簡単に実行することができます。
もしよろしければ、コピー&ペーストをするだけで貴方様の思い通りの動作をするサンプルマクロを組んでみたいと思います。
ご希望の節は、次のことを教えて下さい。
・データが入力されている最終の列番号

お手数をおかけいたします。よろしくお願いいたします。
    • good
    • 0

おっと失礼。

とんちんかんな答えをしてしまいましたね。
takntさんの方法で良いでしょう。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

お礼日時:2002/11/22 03:39

コピーして貼り付けるときに、行列を入れ替えるを選択して貼り付けてください。


貼り付けのボタンの右にある▼で選択できます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
No.6の方の回答により解決いたしました。

お礼日時:2002/11/22 03:28

まず A列を BとCの間、 CとDの間、DとEの間、EとFの間にコピーします。


それで コピーしたA列とC列をA列、B列の後ろにくっつけます。
同じように、ほかの AとD、AとE、AとFをAとBの後ろに順にくっつけて、
B列でソートし、B列の何も入ってない行を削除してから、
A列、B列でソートすればいいでしょう。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
No.6の方の回答により解決いたしました。

お礼日時:2002/11/22 03:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!