Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


14064 / 76734 ←次へ | 前へ→

【68170】Re:VBAソースコードについて
お礼  VBA初心者  - 11/2/8(火) 15:48 -

引用なし
パスワード
   kanabun さん

昨日別件の仕事で職場を離れてしまいましたので、
返事ができませんでした。申し訳ありません。
ご丁寧に回答していただき、本当にありがとうございます。
とても参考になりました。


▼kanabun さん:
>▼VBA初心者 さん: こんにちは〜
>
>質問者さんからの応答がありませんが、
>しばらく参加できないので、レス入れときます。
>回答ではありません。
>
>要は、今現在 入力表のデータ入れ替え統合を(手作業で)どうやって
>処理しているのか、ってことです。その手順を文章化できれば、それを
>VBAのコードに直していけばいいのです。手作業でも、VBAでも、作業の
>手順は変わらないですから。
>
>
>Step1.
>元のファイルの入力表の[E]列〜[O]列を このBookのSheet1の
>[A1]にCopyし、「社員No」と「tscode」で昇順ソートします。
>【Sheet1】
>  [A]  [B]  [C]  [D]  [E]  [F][G][H][I][J][K]
>[1] code 役職  社員No 名前 tscode 1W 2W 3W 4W 5W 6W
>[2] A1  部長  0001 高橋  A001  1 0 1 2 0 2
>[3] A1  部長  0001 高橋  A001  2 2 3 2 1 3
>[4] A1  部長  0002 吉田  B001  2 0 3 4 1 0
>[5] C1  課長  0004 鈴木  D001  0 3 4 3 1 0
>[6] E1  社員1 0005 渡辺  E001  4 2 4 4 1 2
>[7] E1  社員1 0006 長谷川 F001  0 2 1 4 3 3
>[8] G1  社員2 0007 川本  G001  2 3 4 1 0 2
>[9] G1  社員2 0007 川本  H001  2 0 4 2 3 1
>[10] G1  社員2 0008 安田  H001  4 2 0 2 4 2
>
>Step2.
>あたらしいシートをこのBookに追加し、一行目にタイトルを
>書き込みます。
>【SheetNew】
>[F1],[G1],.. のtscodeは 元の【Sheet1】の[E]列に Unique:=Trueで
>フィルタオプションをかけ、得られた重複のないtscode一覧をソート
>したものを行列入れ替えて[F1]にPasteSpecialすればいいと思います。
> 変数WS1を【Sheet1】とし、
> 変数WS2 を【SheetNew】のこととすると、
> WS1.[E1:E10].AdvancedFilter xlFilterCopy, _
>      CopyToRange:=WS2.[E1], Unique:=True
>で、
>  [A]  [B]  [C]  [D]  [E]  [F][G][H][I][J][K]・・・
>[1] code 役職  社員No 名前 tscode
>[2]               A001
>[3]               B001
>[4]               D001
>[5]               E001
>[6]               F001
>[7]               G001
>[8]               H001
>[9]              
>[10]             
>が得られますから、この範囲を(E列だけを)ソートして
>[F1]にTranspose貼り付けします。
> Dim r As Range
> With WS2
>  Set r = .range("E1",.range("E1").End(xlDown))
>  r.Sort Key1:=.Columns(1),Header:=xlYes
>  r.Copy
>  .range("F1").PasteSpecial xlPasteValues, Transpose:=True
>  Application.CutCopyMode = True
>  r.ClearContents
> End With
>の処理で、
>【SheetNew】
>  [A]  [B]  [C]  [D]  [E]  [F] [G] [H] [I] [J] [K] ・・・
>[1] code 役職  社員No 名前    A001 B001 D001 E001 F001 G001 H001
>
>となりますから、[E1]に"week"を代入して、タイトル行は完成です。
>
>
>Step3.
>【Sheet1】を上から順に処理していきます。
>最初の社員番号は 「001」なので 2行目〜7行目にその社員の[A]列〜[D]列
>をCOPYします。 またE列に 1W〜6W を代入します。
>【SheetNew】
>  [A]  [B]  [C]  [D]  [E]  [F] [G] [H] [I] [J] [K] ・・・
>[1] code 役職  社員No 名前 Week A001 B001 D001 E001 F001 G001 H001
>[2]  A1  部長  0001 高橋  1W
>[3]  A1  部長  0001 高橋  2W
>[4]  A1  部長  0001 高橋  3W
>[5]  A1  部長  0001 高橋  4W
>[6]  A1  部長  0001 高橋  5W
>[7]  A1  部長  0001 高橋  6W
>[8]
>[9]
>[10]
>最初のデータ行の tscodeは「A001」です。これが、[F]列〜[L]列の第何列目にあるか
>調べ、変数m に代入します。
>  m =Application.Match("A001",[F1:L1],1)
>m = 1 ですから、F列に(つまり[F2:F7]に 【Sheet】の値を加算していきます。
>
>  [A]  [B]  [C]  [D]  [E]  [F] [G] [H] [I] [J] [K] ・・・
>[1] code 役職  社員No 名前 Week A001 B001 D001 E001 F001 G001 H001
>[2]  A1  部長  0001 高橋  1W   1
>[3]  A1  部長  0001 高橋  2W   0
>[4]  A1  部長  0001 高橋  3W   1
>[5]  A1  部長  0001 高橋  4W   2
>[6]  A1  部長  0001 高橋  5W   0
>[7]  A1  部長  0001 高橋  6W   2
>[8]
>
>2つめのデータは 前と同じく
>> 0001 高橋  A001  2 2 3 2 1 3
>なので    m = 1の行に ↑の値を加算していきます。
>
>  [A]  [B]  [C]  [D]  [E]  [F] [G] [H] [I] [J] [K] ・・・
>[1] code 役職  社員No 名前 Week A001 B001 D001 E001 F001 G001 H001
>[2]  A1  部長  0001 高橋  1W   3
>[3]  A1  部長  0001 高橋  2W   2
>[4]  A1  部長  0001 高橋  3W   4
>[5]  A1  部長  0001 高橋  4W   4
>[6]  A1  部長  0001 高橋  5W   1
>[7]  A1  部長  0001 高橋  6W   5
>
>以上の処理を最終データ行目で繰り返すことにより、
>出力表が出来上がります。
>
>上の処理はセルに直接書き込んでいましたが、これを
>配列を用意してそこに出力して、さいごにまとめてシートに吐き出す
>ようにすれば処理速度は格段にアップします。
3 hits

【68157】VBAソースコードについて VBA初心者 11/2/7(月) 13:44 質問
【68158】Re:VBAソースコードについて kanabun 11/2/7(月) 14:45 発言
【68159】Re:VBAソースコードについて VBA初心者 11/2/7(月) 15:08 質問
【68160】Re:VBAソースコードについて kanabun 11/2/7(月) 15:27 発言
【68163】Re:VBAソースコードについて kanabun 11/2/8(火) 10:15 発言
【68170】Re:VBAソースコードについて VBA初心者 11/2/8(火) 15:48 お礼
【68179】Re:VBAソースコードについて kanabun 11/2/9(水) 20:12 発言
【68161】Re:VBAソースコードについて UO3 11/2/7(月) 17:39 発言

14064 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free