表題の通りですが、エクセル2003で、以下のようなことがしたいです。
[元データ]
A B
1 氏名 田中
2 住所 東京
3 電話番号 ***
4 登録日 ***
5
6 氏名 鈴木
7 住所 埼玉
8 電話番号 ***
9 登録日 ***
10
11 氏名 佐藤
12 住所 埼玉
13 電話番号 ***
14
15 氏名 工藤
のように一人分のデータが、空白セル1マス空けて、延々と続いた様な表があります(3万行くらい)。
これを下記のように変更したいのです
[整理後]
A B C D E
1 氏名 住所 電話番号 登録日
1 田中 東京 *** ***
2 鈴木 埼玉 *** ***
3 佐藤 埼玉 *** (空白)
4 工藤
5
のような感じです。
3つ目の佐藤氏のデータのように元データに登録日という項目が無い場合があります。
それ以外の項目に関して順番や有無の違いはありません、1データの最終行にある登録日という
項目だけ有ったり無かったりします。
項目だけは縦のものを横に貼り付け、で出来たのですが、それが意外のデータを効率よく移すには
どうしたら良いでしょうか。
関数、マクロを教えていただけたらありがたいです。こうしたら良いというアイデアだけでも助かります。どうか宜しくお願いします。
(説明不足のところがありましたらすいません…補足致します)
No.2ベストアンサー
- 回答日時:
VBAのサンプル。
理解できればですが・・・
Sub Macro1()
Dim iWS As Worksheet
Dim oWS As Worksheet
Dim iRow As Long
Dim oRow As Long
Dim iPos As Long
iRow = 1
oRow = 2
iPos = 0
Set iWS = ActiveWorkbook.Sheets(1)
Set oWS = ActiveWorkbook.Sheets(2)
Do While iWS.Cells(iRow + iPos, 1) <> ""
If iWS.Cells(iRow + iPos, 1) <> "氏名" Then
MsgBox "カラム異常 行=[" & iRow + iPos & "] 内容=[" & iWS.Cells(iRow + iPos, 1) & "]"
End If
While iWS.Cells(iRow + iPos, 1) <> ""
Select Case iWS.Cells(iRow + iPos, 1)
Case "氏名"
oWS.Cells(oRow, 1) = iWS.Cells(iRow + iPos, 2)
Case "住所"
oWS.Cells(oRow, 2) = iWS.Cells(iRow + iPos, 2)
Case "電話番号"
oWS.Cells(oRow, 3) = iWS.Cells(iRow + iPos, 2)
Case "登録日"
oWS.Cells(oRow, 4) = iWS.Cells(iRow + iPos, 2)
Case Else
MsgBox "カラム異常 行=[" & iRow + iPos & "] 内容=[" & iWS.Cells(iRow + iPos, 1) & "]"
End Select
iPos = iPos + 1
Wend
iRow = iRow + iPos + 1
iPos = 0
oRow = oRow + 1
Loop
Set iWS = Nothing
Set oWS = Nothing
End Sub
この回答への補足
ありがとうございます。VBAはまだ初心者なのですが。
教えていただいたプログラムで出来ました。
ただ説明不足で申し訳ありません。各データを区切る空白の行が
1行だけではなく、2行の場合も存在するのです。3行はありま
せんでした。
この場合どうすれば良いでしょうか。
No.5
- 回答日時:
Sheet1
A B C
1 氏名 田中 1
2 住所 東京
3 電話番号 01-23-4567
4 登録日 2008/01/23
5
6
7 氏名 鈴木 7
8 住所 埼玉
9 電話番号 02-34-5678
10 登録日 2007/08/09
11
12 氏名 佐藤 12
13 住所 埼玉
14 電話番号 03-45-6789
15
16 氏名 工藤 16
1.Sheet1 の空き列(此処ではC列とする)の1行目に次式を入力し
て、此れを下方にズズーッとドラッグ&ペースト
=IF(A1="氏名",ROW(),"")
Sheet2
A B C D
1 氏名 住所 電話番号 登録日
2 田中 東京 01-23-4567 2008/01/23
3 鈴木 埼玉 02-34-5678 2007/08/09
4 佐藤 埼玉 03-45-6789
5 工藤
6
以下は Sheet2 における操作です。
2.セル A2 に次の[条件付き書式]を設定
数式が =ISERROR(A2)
フォント色 白
3.セル A2 に次式を入力して、此れを右方にズズーッとドラッグ&ペ
ースト
=IF(OFFSET(INDIRECT("Sheet1!"&ADDRESS(SMALL(Sheet1!$C:$C,ROW(A1)),1)),COLUMN(A1)-1,1)=0,"",OFFSET(INDIRECT("Sheet1!"&ADDRESS(SMALL(Sheet1!$C:$C,ROW(A1)),1)),COLUMN(A1)-1,1))
4.セル D2 を yyyy/mm/dd に書式設定
5.範囲 A2:D2 を下方にズズーッとドラッグ&ペースト
No.4
- 回答日時:
1人あて4行(空白行も入れて5行)ばかりなら、作業列を使わず行の計算だけで出来ます。
氏名は =INDEX($A$1:$B$100,(ROW()-1)*5+1,2)
しかし補足で、どうもソウでないらしい(大事なことだから、質問に初めからしっかり書いておくこと)からこの方法は使えない。
ーーーーーー
例データ(空白行数イレギュラーの場合)
第1行目は空白行にする。(データを入れない)
A2:B100の一部
氏名田中1
住所東京
電話番号***
登録日***
ーーー ---<===空白行の代わりの表示
ーーー ---
氏名鈴木2
住所埼玉
電話番号&&&
登録日***
ーーー ---
ーーー ---
ーーー ---
氏名木村3
住所神奈川
電話番号ーーー
C列は =IF(A2="氏名",MAX($C$1:C1)+1,"")
下方向に式を複写
結果
氏名に連番を振っている。
F2に
=INDEX($A$1:$B$100,MATCH(ROW()-1,$C$1:$C$100,0),2)
G2に
=INDEX($A$1:$B$100,MATCH(ROW()-1,$C$1:$C$100,0)+1,2)
H2に
=INDEX($A$1:$B$100,MATCH(ROW()-1,$C$1:$C$100,0)+2,2)
下方向に式を複写
結果 F2:H4
田中東京***
鈴木埼玉&&&
木村神奈川ーーー
上記は抜き出し問題で私が回答している手法の「imogasi方式」(Googleで照会のこと)と同じ手法で出来た。
ーー
もしA列の氏名が当てにならないなら、上記C列n式の変わりに
=IF(AND(A1="",A2<>""),MAX($D$1:D1)+1,"") なら使えるだろう。
塊で最終空白行の次行を氏名行とするという意味である。
No.1
- 回答日時:
各データが誰のデータなのかを管理する情報があれば出来ると思います。
私でしたら、次の様にします。
先頭に作業列を2列追加します(A,B列を追加)。
A1とA2に 1
A3に =IF(D3="","",IF(D2="",A1+1,A2)) と入れて下までコピー。
これでA列が個人No.になり、誰のデータなのか特定できます。
次にB列を作業列として使います。
B1に =A1&C1 と入れて下までコピー
これで、「1住所」の様に個人No.データの項目名が1つになった情報ができました。これをVlookupで整理します。
F~J列を使うとして説明します。
G1~J1に「氏名」「住所」「電話番号」「登録日」と、データの項目名と同じ物を入力します。
そしてF2に 1
G2に =IF(ISNA(VLOOKUP($F2&G$1,$B:$D,3,FALSE)),"",VLOOKUP($F2&G$1,$B:$D,3,FALSE)) と、入れてJ2までコピー
最後に、F2:J2を下までコピー。
コレでいかがでしょう。
この回答への補足
ありがとうございます。出来ました。
ただ説明不足で申し訳ないです。各データの区切りの空白行が
2行になっている場合もありました。。
3行はありません1行か2行になります。。すいませんがこの場合も
教えていただけないでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) EXCELの1行を1枚の用紙にそれぞれ印刷したい。 3 2022/10/10 11:35
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Excel(エクセル) EXCEL 関数を教えてください。(A列の同じ値が複数ある場合vlookupで出来ますか) 4 2022/12/07 20:54
- Excel(エクセル) エクセルの散布図で新たに入力した値のデータラベルが空欄になる現象 1 2022/04/26 09:31
- X(旧Twitter) Twitterの電話番号の登録に関する質問です。 2 2023/04/01 08:40
- その他(プログラミング・Web制作) 入力フォームへ、データを自動的に入力するプログラム。どうやって作る? 4 2023/01/16 10:24
- Oracle sqlで質問です。 Aテーブルの登録番号をキーにBテーブルから確認番号を取得したいのですが、Bテーブ 4 2023/05/18 13:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【関数】スペースがいくつ入っ...
-
西暦や和暦の表示をyyyymmdd表...
-
Excelのセルを飛ばして入力する
-
Excelのオートフィル
-
別シートからの文字を変更
-
Excel 2019 のピボットテーブル...
-
エクセルの行の抽出について質...
-
【マクロ】エクセルにかいてあ...
-
スプレッドシート クエリ関数 1...
-
エクセルでセルに「氏名を入力...
-
MOS365 Excel Expert / Excel R...
-
excelの不要な行の削除ができな...
-
EXACT関数とIF関数の組み合わせ...
-
スプレッドシートの関数VLOOKUP...
-
Excelで全角を半角にしたいので...
-
Excel初心者です。 詳しい方、...
-
エクセルの数式で教えてください。
-
4つのパターンを表示するEXACT...
-
スマートな関数を教えて下さい。
-
【Excel】セル内の時間帯が特定...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル内にある数字の出現回...
-
Excel関数の先頭に「@」が入っ...
-
エクセルの気味悪い不思議
-
Excel VBAで、実行時にsheet上...
-
表示されている人数だけを数え...
-
他人が作ったマクロの理解
-
Excelの関数について質問です。
-
Excel 集計表
-
エクセル 日時の計算式について
-
Excelの関数に関して質問です。...
-
エクセル:セル内の文字列の下...
-
絞り込み検索
-
エクセルの関数で
-
エクセルの書式設定について教...
-
余分なEXCELファイルに印刷され...
-
VBA 同一シート内での転記の仕方
-
長期休みの関数はありますか
-
Excelの空のセル
-
エクセルで入力してある文を別...
-
Excelのマクロで、セルを結合し...
おすすめ情報