例えば以下のようなデータがあります
◆test
aaaaaaaaaaaa
iiiiiiiiiiiiiiiiiiiiiiiiiii
uuuuuuuuuuu
eeeeeeeeeeee
oooooooooooo
◆test2
kaaaaaaaaaaa
kiiiiiiiiiiiiiiiiiiiiiiiii
kuuuuuuuuuu
keeeeeeeeeee
kooooooooooo


これを、
◆test aaaaaaaaaaaa
    iiiiiiiiiiiiiiiiiiiiiiiiiii 
    uuuuuuuuuuu
    eeeeeeeeeeee
    oooooooooooo
◆test2 kaaaaaaaaaaa
     kiiiiiiiiiiiiiiiiiiiiiiiiii 
    kuuuuuuuuuuu
    keeeeeeeeeeee
    koooooooooooo

こんな感じに並べかえたいのですが、どなたかよい方法をご存じないでしょうか。
当方Excelはおろか、マクロVBAなどの知識が皆無です。。。

質問者からの補足コメント

  • はい、添付の図の通りです。
    シートも2になって問題ありません。

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/05/12 22:22

A 回答 (3件)

標準モジュールに以下のマクロを登録し、実行してください。


尚、実行時、Sheet1,Sheet2がないとエラーになります。
---------------------------------------------
Option Explicit
Public Sub 並べ替え()
Dim sh1, sh2 As Worksheet
Dim maxrow1, row1, row2 As Long
Dim str As String
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
sh2.Cells.Clear
maxrow1 = sh1.Cells(Rows.Count, "A").End(xlUp).Row 'Sheet1 A列最大行
row2 = 1
For row1 = 1 To maxrow1
str = sh1.Cells(row1, "A").Value
If Left(str, 1) = "◆" Then
If sh2.Cells(row2, "A").Value <> "" Then
row2 = row2 + 1
End If
sh2.Cells(row2, "A").Value = str
Else
sh2.Cells(row2, "B").Value = str
row2 = row2 + 1
End If
Next
MsgBox ("完了")
End Sub
    • good
    • 1
この回答へのお礼

ありがとうございます!参考にさせていただきます!

お礼日時:2017/05/13 19:11

私のように「マクロVBAなどの知識が皆無」な人向けです。


1.添付図左端を元データとして作業開始
2.列Aを選択して、マウスの右クリックから[挿入]をツン
※元データのシートを弄りたくなければ、列Aを別シートの列Bにコピーすれば好いだけのこと!
※閑話休題。
3.式 =IF(ISERROR(FIND("◆",B1)),"",B1) を入力したセル A1 を下方に
 ̄ ̄ズズーッとオートフィル
4.式 =IF(A1=B1,NA(),B1) を入力したセル C1 を下方にズズーッとオー
 ̄ ̄トフィル
※以上の結果を添付図中央に示しています。
5.列A~Cを選択して、[コピー]→[値の貼り付け]を実行
6.列A~Cを選択したマンマ、Ctrl+G をツンした後で[セル選択]をツン
7."定数"に目玉を入れ替え、"エラー値"以外のチェック外して、[OK]を
 ̄ ̄ツンして即座に Deleteキーを「エイヤッ!」と叩き付け!
※以上の結果を添付図右端に示しています。
8.範囲 B1:C1 を選択して、右クリックから[削除]→"上方向にシフト"
 ̄ ̄→[OK]
※さぁ、最終段階です。
9.列Cを選択して、Ctrl+G をツンした後で[セル選択]をツン
10."空白セル"のみに目玉を入れて、[OK]をツン
11.[ホーム]→[セル <削除>]→"シートの行を削除"
12.列B削除
「Excelを使って行列変換をしたい(大量」の回答画像3
    • good
    • 1
この回答へのお礼

ありがとうございます!!
こちらの手順でも試してみます!

お礼日時:2017/05/13 19:13

データのセルの位置情報は添付の図で、あってますか。


1)変更前はA列に1行からデータが並ぶ(A列のみであり、他の列にはデータなし)
2)変更後は、A列とB列にデータが並ぶ
3)A列に並べるデータは、先頭が◆で始まる文字列とする。
4)変更前のデータはSheet1とし、変更後のデータはSheet2としますが良いですか。
「Excelを使って行列変換をしたい(大量」の回答画像1
この回答への補足あり
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

Qエクセル 重複する値を横に並べ カレンダー化

教えてください。

エクセルで重複する検索値を横にならべる方法を探していて次のサイトを見つけました。

http://excel-forest.net/2016/07/19/not-vlookup/

基本的にやりたいことはこれなんですけど、この表を添付画像の用にカレンダーのように整えることは可能でしょうか?
○でなくても、日付がそのまま記載でもかまいません。

よろしくお願いします。

Aベストアンサー

私は「特に40代・男性」ではありませんが・・・
Sheet2!B2: =IF(SUMPRODUCT((Sheet1!$A$2:$A$14=$A2)*(Sheet1!$B$2:$B$14=B$1)),"○","")

Q◆EXCEL関数◆ EOMONTH を使いたい

EOMONTHを使う場合は、アドインの登録が必要ということですが、アドインってなんですか?また、なぜはじめからインストールされていないのでしょうか?ついでに、この関数をつかわなくても出来る方法ってありますか? やりたいこと=指定した月後の月末日付を計算する。また、月初の場合はそうすればよろしいでしょうか?質問が多くて申し訳ございませんが、わかることだけでいいのでおおしえ頂ければ幸いです。

Aベストアンサー

>月初の場合はそうすればよろしいでしょうか...

参考URLに同様の内容について回答しております。

=DATE(YEAR(A1),MONTH(A1),1) で月始めの日付が得られます。

>アドインってなんですか?

VBAでコーディングしたある機能を XLA と言うひとつのファイルにまとめたものです。これを読み込むことでEXCELの機能を拡張することができます。例えば、EDATE関数のように標準ではない関数を追加したりできます。しかし、「VBAでできること」を超えた機能拡張はできません。

>なぜはじめからインストールされていないのでしょうか?

アドインの機能の大半は既にある標準関数でできるからです。アドインは「使い勝手」を良くするためにあります。

通常アドインはEXCEL起動時に XLA というファイルを読み込みます。アドインを大量に使用すると読み込みファイル数が多くなり、結果EXCELの起動時間が長くなってしまうのです。

「使い勝手」の定義は人によりまちまちです。EDATE関数なども標準関数で代替することができますから、年に1回使うか使わないかの人にとっては、「EXCELの起動時間が長くなるなら不必要」なのかもしれません。

ですから、「必要な人だけインストールして下さい」ということになります。

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=1264107

>月初の場合はそうすればよろしいでしょうか...

参考URLに同様の内容について回答しております。

=DATE(YEAR(A1),MONTH(A1),1) で月始めの日付が得られます。

>アドインってなんですか?

VBAでコーディングしたある機能を XLA と言うひとつのファイルにまとめたものです。これを読み込むことでEXCELの機能を拡張することができます。例えば、EDATE関数のように標準ではない関数を追加したりできます。しかし、「VBAでできること」を超えた機能拡張はできません。

>なぜはじめからインストール...続きを読む

Q◆急募!◆ エクセル 重複するデータの抽出について

下記のようなシート構成の時、A列の中から"5個以上重複する顧客No"を別セルor別シートに表示したいです。データが大量にあるため、マニュアル作業には膨大に時間がかかってしまいます。Googleで調べてみたのですが、条件に一致する方法が見つからなかった為質問させて頂きます。できれば一番簡単な方法でご教授ください。

【シート構成】
   顧客No    社名     機械番号
    A        B       C
1    21     ABC     W1011
2    21      ABC     W1012
3    55      KFC     V2525
4    55      KFC     V2526
5    55      KFC     V2527
6    101     OPPS     H1010
7    252     SUN     T1999
8    252     SUN     T2000
9    252     SUN     T2001
10    252     SUN     T2002
11    252     SUN     T2003
12    503     MIC     P1111
13    521     TET     LV045
14    521     TET     LV046
15    608     GRE     LS123
16    608     GRE     LS124
17    608     GRE     LS125
18    608     GRE     LS126
19    608     GRE     LS127
20    713     BDS     P1212
※A列の顧客Noでソートしている
※機械番号はそれぞれ違う

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

【完成イメージ】別セルの場合
   顧客No     社名     機械番号
     E        F       G
1     252     SUN     T1999
2     252     SUN     T2000
3     252     SUN     T2001
4    252     SUN     T2002
5     252     SUN     T2003
6     608     GRE     LS123
7     608     GRE     LS124
8     608     GRE     LS125
9     608     GRE     LS126
10    608     GRE     LS127

【利用環境】
Office2003 SP3
OS Windows XP SP3

下記のようなシート構成の時、A列の中から"5個以上重複する顧客No"を別セルor別シートに表示したいです。データが大量にあるため、マニュアル作業には膨大に時間がかかってしまいます。Googleで調べてみたのですが、条件に一致する方法が見つからなかった為質問させて頂きます。できれば一番簡単な方法でご教授ください。

【シート構成】
   顧客No    社名     機械番号
    A        B       C
1    21     ABC     W1011...続きを読む

Aベストアンサー

D1に
=COUNTIF($A$1:$A$20,A1)
と入力して、これを最終行までコピーします。
(20は行数です。適宜変更して下さい)
後はオートフィルタでD列が5以上で抽出すればいいです。

件数が何万件もあると計算に多少時間がかかるかもしれませんが
そこは気長にお待ち下さい。

Q◆エクセル◆プルダウンの文字列でシート名指定

エクセルで、以下のようなシートがあります。
・東京2010
・東京2009
・埼玉2010
・・・のように、都道府県名+年度のシートがたくさんあります。

また、都道府県名だけのプルダウンメニューがあり、
関数に手書きで数値をドッキングさせて他シートの値を持って来たいのです。
そこで以下のような関数を作成してみました。

=(プルダウンのセル番号)& 2009!A4
これではエラーが出てしまい、値を持ってこれませんでした。
私のイメージとしては、こうすれば
=東京2009!A4 と同じようになるかと思ったのですが・・。

是非方法をご教示願います。よろしくお願いします。

Aベストアンサー

こういう場合は、INDIRECT関数を使って、

例えば、B1が入力規則プルダウンセルとしたら

=INDIRECT( B1 & "2009!A4")
 
以上です。

Q標準モジュールで 『Sub test(ByVal Target As Range)』は動かない?

選択されている複数のアドレスが知りたいので
標準モジュールに
Sub test(ByVal Target As Range)
Debug.Print Target.Address
End Sub
と書きました。

しかしF5ボタンを押しても何も起こりません。
デバッグ→コンパイルをしてもエラーになりません。

シートのイベントプロシージャーではなく
標準モジュールにした理由は
イベント発生時ではなく、任意で起動させたいためです。

ためしに、
Sub test(ByVal Target As Range)
Debug.Print Target.Address
End Sub
の下に、

Sub test2()
Call test
End Sub

と書いたら、
「引数は省略できません。」
というエラーになりました。

何がダメなのかわかりません。
ご教授よろしくお願い致します。

Aベストアンサー

こんばんは。

今回は、初歩的なことですが、段階を経たほうがよいと思います。つまみ食いのようなことをしても、なかなか、VBAもWSHも覚えられないと思います。しかし、今回のように単発では、こちらの書いていることはほとんど分かってもらえないと思います。

今回は、サブルーチンのコードですが、サブルーチンを書くということは、それなりに、その前段階を理解していなくてはなりません。イベント・ドリブン型とは関係がありません。

それと、Target は、予約語ではありませんが、イベント・ドリブン型の引数に使われているものですから、他の語を使ったほうがよいです。それを許していると、自分ですらコードが読めなくなっていくはずです。

今回のようなコードを実際に書くことはありえませんが、ByVal キーワードは、入れるのと入れないのでは違いがありますが、Test1 側で、引数のデータ型が決めてあれば、入れなくても構わないです。Debug.Print としてしまったら、さっぱり、その意味が見えないでしょうけれども……。

F5を押しても、サブルーチンは呼び出さないと動きません。
それに、呼び出す場合は、引数を入れなければなりません。

'-------------------------------------------

Sub Test1()
Dim c As Range  '←これがあるので、ByVal は不要
For Each c In Range("A1:A10")
 Call Test2(c)
Next c
End Sub

'サブルーチン(Target という名称は使わない)
Sub Test2(rng As Range)
  Debug.Print rng.Address
  'Debug.Print では、良く意味が分からないはずです。
  'Range オブジェクトを引数にしたら、いろんな使い方がある
End Sub

'-------------------------------------------

こんばんは。

今回は、初歩的なことですが、段階を経たほうがよいと思います。つまみ食いのようなことをしても、なかなか、VBAもWSHも覚えられないと思います。しかし、今回のように単発では、こちらの書いていることはほとんど分かってもらえないと思います。

今回は、サブルーチンのコードですが、サブルーチンを書くということは、それなりに、その前段階を理解していなくてはなりません。イベント・ドリブン型とは関係がありません。

それと、Target は、予約語ではありませんが、イベント・ドリブン...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報