Excel VBA 質問スレ Part73

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 4668-xJJl)
垢版 |
2021/09/13(月) 07:29:59.47ID:GNx0xRRz0
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を2行貼り付けるナリ

ExcelのVBAに関する質問スレナリ
コード書き込みや作成依頼もOKナリ

※前スレ
Excel VBA 質問スレ Part70
https://mevius.5ch.net/test/read.cgi/tech/1616072923/
Excel VBA 質問スレ Part71
https://mevius.5ch.net/test/read.cgi/tech/1621914481/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2021/10/16(土) 19:30:00.02ID:m1u7MgLp0
いや、問題はSubかFunctionかじゃないんだが
FunctionをCallしても、戻り値が捨てられるだけで別に問題はないぞ
名前の付け方がまあアレだが

Dim WS As Worksheet の行消して

Function TEMP_SHEET() As Worksheet
Set TEMP_SHEET = ThisWorkbook.Worksheets("temp")
End Function

Function test3(WS As Worksheet) As Variant
With WS
.Select
.Cells(1, 1) = "test"
End With
End Function

とかで動くだろ
413デフォルトの名無しさん (ワッチョイ 6b01-Avck)
垢版 |
2021/10/16(土) 20:00:16.92ID:EZGI4ZK10
>>412
ありがとうございます。すごく勉強になりました。
2021/10/16(土) 21:23:47.08ID:aQ5UbG+6a
最終の答え得るためにいくつの関数に分けるか、というのはどうやったら身につくんでしょうか
2021/10/16(土) 21:32:26.89ID:a6cW1Kja0
分けたくなったら分ければいい

・朝起きる
・トイレ
・歯磨き
・食事
・デンタルフロス
・着替え
・家出る

寝起きのルーチンとしてトイレ歯磨きをセットとするとか
無い時もある食事デンタルフロスをセットとするとか
歯磨きが先なのは寝起きで飲み食いが嫌で個人的な事だから異論はあると思う
2021/10/16(土) 21:49:34.88ID:CDLajE+o0
>>414
欲しい答えじゃないかもしれないけど

同じような処理を何度か書くような場面ができたときに、一つの関数にまとめるべきか検討するといいよ

むやみに何でも関数にすればいいというものではない
2021/10/17(日) 09:01:15.98ID:MVHP31+Wa
>>415
>>416
ありがとうございます。
手続き型しか書けなくて、ダラダラ長くなってしまうのが少し気になり始めてしまって、見やすいシンプルなコード見ると、どうしたらこういう考え方できるのかなと。
実験的にもいろいろやってみます。
418デフォルトの名無しさん (ワッチョイ 2bb1-SdPo)
垢版 |
2021/10/17(日) 11:37:36.37ID:LVwZEVKT0
別スレから来ました

A1 会社名 B1仕事の項目 C1整理番号
B1の項目に従って規定のExcelファイルを開いてA1の会社名とC1の整理番号を合体して名前をつけて保存っていう操作をしたいんだけど、これはVBAで出来ますか?
別件ですがVBAでオススメの書籍があれば教えてください
2021/10/17(日) 11:41:00.73ID:Vlp9RG+s0
余裕で可能
2021/10/17(日) 11:47:00.68ID:rQoWwir60
>>418
大分質問が上手くなったじゃないか。
ただ規定のファイルにはただ名前つけて保存するだけでいいのか?
2021/10/17(日) 12:11:29.02ID:ZLWKnlAP0
>>418
どこのスレから来たの?
Rubyスレかそうでないかで対応変わるんだけど
2021/10/17(日) 12:14:56.83ID:rQoWwir60
なんでExcelファイル操作するのにRubyスレから来るんだよ
423デフォルトの名無しさん (ワッチョイ 2bb1-SdPo)
垢版 |
2021/10/17(日) 12:16:45.71ID:LVwZEVKT0
別スレから来ました

A1 会社名 B1仕事の項目 C1整理番号
B1の項目に従って規定のExcelファイルを開いてA1の会社名とC1の整理番号を合体して名前をつけて保存っていう操作をしたいんだけど、これはVBAで出来ますか?
別件ですがVBAでオススメの書籍があれば教えてください
2021/10/17(日) 12:18:39.23ID:rQoWwir60
頭おかしくなったのか?
425デフォルトの名無しさん (ワッチョイ 2bb1-SdPo)
垢版 |
2021/10/17(日) 12:19:45.69ID:LVwZEVKT0
ブラウザバックしたら投稿した
すまない
Excel質問スレから来た

>>420
名前をつけて保存の前にいろいろやろうとは思ってるけど、VBA素人だからとりあえず名前をつけて保存までにしようと

VBAで出来ることはわかったのでダイマでもステマでもいいのでオススメの書籍を教えてください
2021/10/17(日) 12:22:55.44ID:Vlp9RG+s0
だってルビースレから来た時点で質問が目的じゃなくて
最終的にルビーコード貼り付けてどやーするのが目的の人だし
427デフォルトの名無しさん (ワッチョイ 2bb1-SdPo)
垢版 |
2021/10/17(日) 13:08:15.77ID:LVwZEVKT0
ルビースレってそもそもなんなのかって状態なんだが…
この板はブラウザバックで二重投稿した程度で中傷くらったりするのか?
エクセルのVBAについて質問してるのに全然違う答え返ってくるし
2021/10/17(日) 13:55:19.97ID:l76d9bPwM
ニヤニヤ
2021/10/17(日) 14:58:05.05ID:OE8yqt320
>>425
自分で本屋に行って内容を確認しようとは思わないのか?
2021/10/17(日) 15:24:33.87ID:rQoWwir60
>>425
B1の項目に従ってというのが謎なので気を利かせて絶対パスで指定のファイルを開くようにしたよ。
ちなみに5ちゃんに書くとファイルパスの¥マーク書けないから半角に直してね。

思ってた動きと違うと言うなら自分の質問200回音読してから書いてね。
動作が不足してるならちゃんと質問のここが出来てないって書いてね。

使い方
・データを打ち込んでるブックで、処理させたいデータの行のどの列でもいいから選択しておく
・マクロ実行
・指定したファイルに選択した行のA列+C列のデータの名前で名前をつけて保存される

─────────────────────


Sub test()

Gyo = Selection.Row

Data0 = Cells(Gyo, 1).Value
Data1 = Format(Cells(Gyo, 3), "000")

Namae0 = ThisWorkbook.Path & "¥" & Data0 & Data1 & ".xlsx"
Namae1 = Data0 & Data1 & ".xlsx"

Workbooks.Open "C:\Users\*****.xlsx"

Workbooks("*****.xlsx").SaveAs Filename:=Namae0

Workbooks(Namae1).Close

End Sub
2021/10/17(日) 15:26:59.96ID:Vlp9RG+s0
あーあルビーキチガイに無駄なエネルギー使ってる
2021/10/17(日) 15:28:04.20ID:XdTFVkom0
ツンデレで草
2021/10/17(日) 16:11:59.85ID:lULOB+dMM
>>430
> Workbooks.Open "C:\Users\*****.xlsx"
> Workbooks("*****.xlsx").SaveAs Filename:=Namae0
> Workbooks(Namae1).Close
こんなふうに書く人いるけどなんで
Dim Book As Workbook
Set Book = Workbooks.Open("C:\Users\*****.xlsx")
Book.SaveAs Filename:=Namae0
Book.Close
って書かないのか不思議だ
434デフォルトの名無しさん (ワッチョイ ef68-VjlT)
垢版 |
2021/10/17(日) 19:08:06.14ID:F19IWtWk0
>>433
単に返り値がopenしたbookであることを知らないだけだと思う
俺も昔は前者みたいな書き方してたな
2021/10/17(日) 19:23:15.59ID:6d2YQk+QM
なるほど、結構基本的なことだと思ってたけどそうでもないんかな
シートでも Worksheets("sheet1").~ って書いてる人をよく見る
2021/10/17(日) 19:27:41.57ID:rQoWwir60
>>433
わたすもまだ今年から始めたド素人なもので…。参考になります。
>434の言うとおり戻り値がそんなだなんて知らなかったんだよう。
2021/10/17(日) 19:29:03.49ID:QrrwaG0ad
後続の処理でworkbookオブジェクトを使わないならWithで纏めちゃうな

With Workbooks.Open("C:\Users\*****.xlsx")
.SaveAs Filename:=Namae0
.Close
End With

こんな感じで
2021/10/17(日) 19:31:49.54ID:rQoWwir60
>>437
一行ごとに処理書いてる感なくてスマートでええな。
2021/10/17(日) 21:41:34.16ID:TEYo+ExJ0
Withは便利だけど積極的には使わない派
後で見返す時にわけわからなくなるから
2021/10/17(日) 21:43:33.55ID:80TNtCCb0
ネストしたwithを見たらエディタ閉じるわ
2021/10/17(日) 21:48:12.01ID:eFAt1kMMd
俺は>>437と同じ
オブジェクトを変数に入れずにWithに直接ぶっこむ派
DimとSetの行がなくなるから入力の手間も減るし狭い画面でソースが見やすくなる
2021/10/17(日) 21:51:58.87ID:W9ZcRzM1M
扱うオブジェクトが1つならいいけど複数あったりサブルーチンに渡したりする時もあるから
443デフォルトの名無しさん (ワッチョイ ef68-VjlT)
垢版 |
2021/10/17(日) 22:22:04.64ID:F19IWtWk0
withはネストするとトタンに見にくくなるよね
>>437ぐらいなら見やすいと思うけど、>>439と完全に同意見だわ
2021/10/18(月) 00:37:42.11ID:48un5MBo0
以前VB6スレでもWith Newを使ってる人がいて論議になったことがあったね。

俺はこの方法は有りだと思う。
ひとつしか使えないけど関数やメソッドの中で唯一ひと階層下のスコープを設定出来る方法だからそれを意識した使い方なら。

ただこの方法であまり長いロジックを組むのは確かに可読性に宜しくないのも同意。
だから使いどころに気をつけながら使う方法だと思うよ。
2021/10/18(月) 00:52:44.24ID:5AqMk2S7d
オブジェクトを抱えるWithはSubやFunctionとセットで使うんだよ
1つのSubには一つのWith
それ以上になる時は機能を詰め込みすぎだから分割すべき
2021/10/18(月) 01:37:56.48ID:Zxhiy8zv0
https://ro69-bucket.s3.amazonaws.com/uploads/artist_image/image/2282/width:600/resize_image.jpg
2021/10/18(月) 07:58:42.77ID:Xmojsja+0
複数のファイルじゃなくて複数のフォルダを選択する方法はありますか?
2021/10/18(月) 08:17:54.78ID:iA8avgoCM
>>447
vba 複数フォルダ選択
でググればいくらでも出てくる
https://stabucky.com/wp/archives/1507
449デフォルトの名無しさん (アウアウウー Sacf-8a12)
垢版 |
2021/10/19(火) 05:36:51.83ID:s00hPK6/a
クリックする
2021/10/19(火) 13:51:25.65ID:DDPhMqNbr
パワポもvbaで操作している人はいますか?
また手っ取り早く時短できる部分はありますか?
2021/10/19(火) 14:28:41.78ID:P0vvwNoGM
>>450
Excel のデータを50枚ぐらいにスライドに整形して表示するって言うのをVBAでやったよ
2021/10/19(火) 16:06:34.91ID:DDPhMqNbr
>>448
リンクにあるのはフォルダじゃなくてファイルについてですね。。。
どうやらファイルは複数選択できるけどフォルダはできないっぽいですね。。。
2021/10/19(火) 16:21:20.09ID:4aO6vjST0
>>452
横槍だけどリンク先ちゃんと下まで読んだ?
2021/10/19(火) 16:32:01.94ID:wN2ah2c70
全くの初心者です

元エクセルファイルを、そのファイル内の特定のシートの特定のセルないの文字(名前)でフォルダを作成し(作成階層は元エクセルファイルがある場所)、そのフォルダ内にフォルダと同じ名前で元エクセルファイルを出力したいです

検索してみてそれっぽいコードを実行してみましたが上手く行かないか1004のエラーが出てしまうので、できれば教えていただきたいです
2021/10/19(火) 17:37:09.15ID:4z76YikWM
>>454
まずは自分で作ったプログラムをここに貼って
2021/10/19(火) 17:40:33.12ID:mCqSTcWyM
>>454
流石にエスパーじゃないからそれだけの情報じゃなんとも言えんが、
ファイルの指定が間違ってる可能性がありそう
エラーが出たときにデバッグってボタン押したらどんな命令文の背景が変わってる?
省略しないでその文を一字一句違わず書いてみ?
457デフォルトの名無しさん (ワッチョイ 2b8e-ToKj)
垢版 |
2021/10/19(火) 18:02:38.90ID:ukSaGu280
実行してるファイルと同じ名前はダメだろ
2021/10/19(火) 20:26:31.01ID:DOUatBbL0
>>457
元のファイルがあるフォルダーのサブフォルダーに格納されるんで同じ名前でも大丈夫だよ。
459デフォルトの名無しさん (アウアウウー Sacf-8a12)
垢版 |
2021/10/20(水) 00:29:04.94ID:P5tYW80ga
質問者の勘違いとエスパーしたんじゃね
2021/10/20(水) 00:47:36.84ID:Xbyc9Pekd
わたしは、エスパー
今、質問者の脳内に、直接、回答を送っています
わたしは、エスパー
2021/10/20(水) 00:49:43.99ID:Xbyc9Pekd
残念です
夜中なので、質問者は、寝てました
残念です
462デフォルトの名無しさん (ワッチョイ 9f02-Avck)
垢版 |
2021/10/20(水) 00:53:24.04ID:VLQwVQRS0
なぜプログラム板でExcelVBAのスレが活発なのよ?
日本終わってんな
2021/10/20(水) 03:43:52.55ID:gq1XFNWx0
労働者の多くがExcel使ってんだから需要からしたら普通だろ
2021/10/20(水) 06:13:11.55ID:RXqG14DY0
まぁ年収ランキングとしてもそこそこ高い位置にいるし当然と言えば当然だな
https://xtech.nikkei.com/atcl/nxt/column/18/01068/111100004/
2021/10/20(水) 10:35:33.40ID:Nii7YXA70
>>462
なんでRubyスレにいかないの?
2021/10/20(水) 10:37:34.01ID:cqpH7rMEd
プログラマーじゃない人もたくさん使ってるから
人が増えるのは必然
2021/10/20(水) 17:58:56.42ID:DdoeWcxm0
>>456
https://lilia-study.com/excel/vba-sample/cellvalue-save/


Sub hozon()
Dim wb As Workbook
Dim ws As Worksheet
Dim hozonPath As String
Dim FolName As String
Dim FilName As String

Set wb = ThisWorkbook
Set ws = ActiveSheet

hozonPath = “K:\”
FolName = ws.Range(“A1”).Value
FilName = ws.Range(“A2”).Value

wb.SaveAs Filename:=hozonPath & FolName & “\” & FilName
End Sub

このvbaで
A1=A2にして、hozonPathをThisWorkbook.Pathにしたりすればできるかな?と思ったのですが上手く行かずです…
2021/10/20(水) 18:30:57.52ID:3UsBchoVM
ThisWorkbook.Pathにはケツの¥が付いてないから
ThisWorkbook.Path & ”¥” & FolName & “\” & FilName
に書き換えてみ
2021/10/20(水) 18:49:10.89ID:YqKlvam70
\
"
半角にしてね
2021/10/20(水) 20:45:15.20ID:Es2OjjC60
>>467
お前のPCにK:ドライブは存在するのか?
とりあえず
wb.SaveAs のまえに、
MsgBox hozonPath & FolName & “\” & FilName
いれて、表示された内容をかけ

個人名とか入ってたら適当に隠せよ
471デフォルトの名無しさん (ワッチョイ efda-KUiw)
垢版 |
2021/10/20(水) 22:22:06.11ID:mCILNp7G0
超初心者です 

以下の対応をさせたいです
@シートを支店分だけ増やす
Aシート名をそれぞれ「支店一覧」A2〜A18の支店名にする
B作成したシートのB5に支店名を入れる
C作成したシートの表のA列が"0"になっている行を削除する
D作成したシートのオートフィルタを解除する

以下のものではエラーになりますが、どこが悪いのでしょうか

Sub シート作成
Dim 支店名 As Range
For Each 名前 In Worksheets("支店一覧").Range("A2:A18")
Worksheets("原本").Copy After:=Worksheets(Worksheets.Count)
With ActiveSheet
.Name = 支店名.Value
.Range("B5") = 支店名.Value
End With
  Range("B3").AutoFilter 1, "0"
With Range("B3").CurrentRegion.Offset(1, 0)
.Resize(.Rows.Count - 1).EntireRow.Delete
  Range("B3").AutoFilter
End With
Next 支店名
End Sub
472471 (ワッチョイ efda-KUiw)
垢版 |
2021/10/20(水) 22:24:48.55ID:mCILNp7G0
Cは「B列が"0"になっている行を削除する」の誤りでした
473デフォルトの名無しさん (ワッチョイ ef68-KUiw)
垢版 |
2021/10/20(水) 22:37:03.53ID:SCNNHF4n0
とりあえずここだと思う
下の方はサンプル作ってくれれば試すけど、手元にないからよくわkらん

Sub シート作成()
For Each 支店名 In Worksheets("支店一覧").Range("A2:A18")
474471 (ワッチョイ efda-KUiw)
垢版 |
2021/10/20(水) 22:41:41.27ID:mCILNp7G0
>>473
大変失礼いたしました
あるページからコードをコピーしてきたときに修正し忘れました
実際は名前→支店名にしていましたが、エラーとなっていました
エラーの内容の詳細が必要でしたら、明日投稿します
(現在手元にExcelファイルがなく、すみません)
2021/10/20(水) 23:13:32.77ID:dYcbK4WK0
安心して
手元にエクセルファイルが無いのに記憶だけでそこまで書ければ超初心者じゃないよ
2021/10/21(木) 05:25:42.24ID:wIUVM+qQM
>>474
> エラーの内容の詳細が必要でしたら、明日投稿します
なぜ最初から書かないの?
477デフォルトの名無しさん (ワッチョイ ef68-KUiw)
垢版 |
2021/10/21(木) 06:18:01.89ID:8cr/BFDG0
>>471
あと、
・どこで
・どんな
エラーになるのか書いて
2021/10/21(木) 06:54:51.77ID:MLEFHfinM
Select Caseにbreakがないのは何故なんでしょうか
beakがないから最初に一致した条件以降のCaseも
実行されると勘違いしやすい
仕事で大きなトラブルを起こしてしまった…
2021/10/21(木) 07:06:17.27ID:mcI3miqCM
Select Caseって上から順に見て真っ先に当てはまったCaseのみ実行じゃなかった?違うんだっけ?
2021/10/21(木) 07:46:09.23ID:Ue09v+2oM
>>478
> Select Caseにbreakがないのは何故なんでしょうか
そういう仕様だから
Pascal とかと同じ

> beakがないから最初に一致した条件以降のCaseも実行されると勘違いしやすい
むしろCとかでbreak忘れてトラブる奴の方が多いだろ
なのでC# はコンパイルエラーにするぐらいだし

> 仕事で大きなトラブルを起こしてしまった…
仕事で使うならちゃんとテストしろよ…
2021/10/21(木) 11:01:11.45ID:kxdLHT3P0
>>479
違うよ
Select Case の後にTrueとか書いて
Case の後にTrueとかFalseとか書くと
簡単に確認出来るよ
2021/10/21(木) 11:14:41.56ID:kxdLHT3P0
>>478
これはVBAとかCase文に限らず今自分がやってる言語→ 他言語に切り替える際には何か違う挙動するなー、て言うのはあるあるなことだからまぁいい勉強になったって思うべきだね。

>>480の人が言う通り仕事で使用するならキチンとテストするべきだったね。
UTとして証跡残すのがセオリーだけど、せめて一度走らせて挙動確認しておけば今回の件は防げたはず。

その言語仕様を嘆くよりそういったこともあるって次回に生かした方が幸せになれると思うよ。
2021/10/21(木) 12:11:34.23ID:8w0PnAXQ0
select case 普通に動作するんだが、どうやったらトラブル起こせるんだ?
2021/10/21(木) 17:55:34.88ID:88nPUo+s0
>>470

https://d.kuku.lu/8dd3704ad


すみませんimgurが使えないのでよくわからんあぷろだですが…

やはりエラーが出ます、
2021/10/21(木) 18:43:47.31ID:mcI3miqCM
だからhozonPathとFoINameの間に¥を入れろって
486デフォルトの名無しさん (ワッチョイ 2b8e-g8Px)
垢版 |
2021/10/21(木) 21:55:14.75ID:fbrP1i9b0
>>484
お前みたいな馬鹿にはVBAは無理だと思うよ
487デフォルトの名無しさん (ワッチョイ ef68-KUiw)
垢版 |
2021/10/21(木) 22:14:08.48ID:8cr/BFDG0
>>484
最強料理はケバブ
488デフォルトの名無しさん (ワッチョイ ef68-KUiw)
垢版 |
2021/10/21(木) 22:16:16.48ID:8cr/BFDG0
コピペ間違えた

>>484
wb.SaveAs Filename:=hozonPath & "\" & FolName & “\” & FilName


あと
FolderName
を無理に
FolName
と変に略すと、あとで何書いてるかわからなくなるぞ。
2021/10/21(木) 23:15:26.60ID:5CobycYg0
パス区切りに、/ は使えないの?

例えば、Ruby なら、

glob_pattern = "C:/Users/Owner/Documents/*.txt"

p Dir.glob( glob_pattern )

出力
[ "C:/Users/Owner/Documents/a.txt",
"C:/Users/Owner/Documents/b.txt" ]
490デフォルトの名無しさん (アウアウウー Sa45-/pkb)
垢版 |
2021/10/22(金) 00:34:42.64ID:2cM8PEAKa
やってみればわかるんじゃないの?
491デフォルトの名無しさん (ワッチョイ e98e-Ti9O)
垢版 |
2021/10/22(金) 00:44:00.08ID:1RQkewhE0
あまりに馬鹿過ぎると思ったらやっぱりruby馬鹿か
2021/10/22(金) 00:46:54.73ID:5YslU4UB0
>>484
何をやりたいのかよくわからんけど、連続して2回以上実行すると、実行回数分のネストしたフォルダが必要になるのでエラー吐く。
あと、コピー先のフォルダ/ファイル名はActiveSheetを参照しているので、複数ブック開いていたりするとおかしなことになる。
2021/10/22(金) 01:17:15.93ID:MBOrFbAX0
>>484
保存先のフォルダがないとそのエラーになるから、wb.SaveAsの直前にその確認を入れる
↓で動いたの確認した

'※hozonPathはあるのか
Dim ExistHozonPath As Boolean
ExistHozonPath = Len(Dir(hozonPath, vbDirectory))

If Not ExistHozonPath Then MsgBox hozonPath & "ドライブは存在しません。"

'※FolNameはあるのか
Dim FolFullName As String, ExistFol As Boolean
FolFullName = hozonPath & FolName
ExistFol = Len(Dir(FolFullName, vbDirectory))

If Not ExistFol Then
Dim Question As String
Question = "「" & FolFullName & "」フォルダが存在しません。作成しますか?"
Select Case MsgBox(Question, vbYesNo)
Case vbYes 'はい→作る
MkDir FolFullName
Case vbNo 'いいえ→終了
Exit Sub
End Select
End If

wb.SaveAs Filename:=hozonPath & FolName & "\" & FilName
2021/10/22(金) 01:25:21.34ID:MBOrFbAX0
>>493
ドライブない時に終了させるの忘れてた
2021/10/22(金) 07:57:46.72ID:uyzrt+dja
ユーザーフォーム自体(コードではなくてボタンとかが表示されている方)を印刷する時、
デフォルトで用紙が縦になるんですが、横に出力する方法はないでしょうか?
496デフォルトの名無しさん (ワッチョイ 05e5-NSZO)
垢版 |
2021/10/22(金) 09:34:10.25ID:EjatPKif0
>>495
Windowsの設定(コンパネ)のプリンタで用紙設定しておく
2021/10/22(金) 12:17:25.64ID:uyzrt+dja
あー、あの縦か横かをオプションボタンで選ぶ画面ですね。
VBA以前の問題でした。失礼しました。
帰宅したら試します。
2021/10/22(金) 19:20:10.02ID:eWxCtPi7a
横1列に並んだセルを
A B C D E F
1 あああ いいい ううう 阿嗚呼 伊井伊 雨右鵜
2 かかか ききき くくく 可化歌 機器機 久々九
3

A B C
1 あああ いいい ううう
2 阿嗚呼 伊井伊 雨右鵜
3 かかか ききき くくく
4 可化歌 機器機 久々九
のように1行飛びに成形するにはどうしたら良いですか?
2021/10/22(金) 19:23:55.44ID:mTcFiW+U0
頑張ってコピペしろ
2021/10/22(金) 19:26:54.87ID:cisRZQTm0
>>498
一組が1行✕6列からなるセル範囲を別シートの
2行✕3列に出力するマクロでいいのでは?
2021/10/22(金) 20:37:51.08ID:pZfGL40n0
こういうの自力でできないようじゃ教わってもしょうがないんじゃね
2021/10/22(金) 20:47:03.46ID:Fa1Ohywp0
>>493
ありがとうございます。満足いく挙動になりました!
2021/10/22(金) 22:34:54.56ID:0NScRLlYa
>>499
現状頑張ってコピってます
>>500
ありがとうございます
もちろんDBから引っ張って来たシートとは
別の印刷用シートのセルに=で参照させるんですが・・
マクロの記録を頼りにしてみます
>>501
自力で・・
2021/10/22(金) 22:59:58.93ID:4e59Jt0n0
関数でできる
Sheet1のデータをSheet2に出力するとして、Sheet2のA1に次の式を入力してコピペ
「Sheet1!$A$1:$F$999」は範囲なので適当に直して

=INDEX(Sheet1!$A$1:$F$999,ROUNDUP(ROW()/2,0),IF(MOD(ROW(),2)=1,COLUMN(),COLUMN()+3))
505デフォルトの名無しさん (ワッチョイ 824f-iBLV)
垢版 |
2021/10/22(金) 23:08:32.12ID:Jvo+jO0O0
>>498
'標準モジュール側
Sub hoge()
Dim list As New Collection
Dim entity As Class1
Dim i As Integer
Dim j As Integer

For i = 1 To 3
For j = 1 To 4 Step 3
Set entity = New Class1
entity.value1 = Cells(i, j)
entity.value2 = Cells(i, j + 1)
entity.value3 = Cells(i, j + 1)
Call list.Add(entity)
Next
Next

Range("A1:F3").ClearContents

For i = 1 To 6
Cells(i, 1) = list(i).value1
Cells(i, 2) = list(i).value2
Cells(i, 3) = list(i).value3
Next

End Sub

'クラスモジュール側(Class1)
Public value1 As String
Public value2 As String
Public value3 As String
2021/10/22(金) 23:11:35.60ID:Jvo+jO0O0
おっと
ちょい間違い

どこ間違ってるか探してみて
2021/10/22(金) 23:21:55.85ID:MBOrFbAX0
>>503
というか、普通に手作業でやってる手順をVBAで書き下せばいいだけだよ

コピペ元の範囲の場所を示す
dim srcRow as long
dim srcCol as long
と、
コピペ先の範囲を示す
dim dstRow as long
dim dstCol as long
を作って、

1〜3列目は同じ列、4〜6列目は次の行にコピペ

っていう作業を繰り返せばいい。
ペアになる変数はユーザー定義型を使うと見易くなる

type MatrixIndex
Row as long
Col as long
end type
dim src as MatrixIndex,dst as MatrixIndex
2021/10/22(金) 23:34:57.82ID:MCKX1YxAa
>>504
偶数奇数の数列ですね!ありがたやー
>>505
んー データシートの消し込みって一般常識なんですかね?
まっコメントアウトするだけだし
 iとjが逆かな? でもなんとかなりそう!
ありがとうございましたア!
2021/10/22(金) 23:40:58.45ID:rmoybpwYa
>>507
プログラムは作業の手順書とはいえ
>>505さんのクラスモジュールを使うだとか
ユーザー定義型変数を使うという発想に至りませんで・・・
皆様ありがとうございました。
510デフォルトの名無しさん (ワッチョイ e98e-Ti9O)
垢版 |
2021/10/23(土) 02:07:03.33ID:3lNDidpi0
いつものあいつ
2021/10/24(日) 01:40:51.53ID:BvAAjUlj0
>>498
G列に上から1,2と入れて、さらに下方のデータの無いG列に1,2とコピペする
表全体を選択してフィルターを適用。G列でソートする
以上で一行ごとに空行が挿入される
つづいてD1:F2を選択、コピー
A2に形式を選択して貼り付け(空白を無視する)
出来上がり
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況