Excel VBA 質問スレ Part78

■ このスレッドは過去ログ倉庫に格納されています
2022/10/30(日) 13:43:16.31ID:6yf2E1Gz0
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を3行貼り付けること

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

次スレは>>980が立てること
無理なら細かく安価指定

※前スレ
Excel VBA 質問スレ Part77
https://mevius.5ch.net/test/read.cgi/tech/1658009255/

-
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2023/01/21(土) 10:59:00.69ID:Zr2lAE610
そも、縦書きと横書きという独特の言い回しが相手には伝わりにくい
あいうえお ← 横書き

い  ← 縦書き  普通に読んでればこう捉える




でもそれでは無くて、帳票の状態が普通はA4横長で印刷してるものを、月イチではA4縦長で印刷したいとかなのか
ほんとうに文字ごとタテ並びにしてしまいたいのか  後者なら敷居が相当高いけど
しかし、初めて白状した状況だと相当の高齢者が毎月なんらかの帳票を印刷するのに苦心している様子からして
自治会の会計資料だのそういう方面だとも考えられる
自分でサンプルを提示するのが困難なら、どっかのサイトで似たような状況を探って画像検索でもしてみて「こういうのをこうしたい」と書かないと伝わり難い
自治会用のExcelサンプルなんかゴロゴロ転がってるし、それを参考にするとか流用するとか  見立て違いなら失敬
   しかし、単に「印刷範囲」をその都度指定するだけで簡単に解決するような質問のような気もしてる
2023/01/21(土) 12:20:46.74ID:qZakY6uUr
>>750
打ち出しているのは零細企業の売上報告資料です
経営陣と上司が高齢者なので今まで長年使い続けて来た会議資料のフォーマットは原則何も変えてはならないという前提の作業です

売上が得意先の売上高順に並べられている資料で
右側に売上の内訳があります

単純にA4縦をA4横にして印刷するわけでは無くて列の削除が2列必要になり、その列を単純に削除すると関数が埋められてるのでエラー表示になるので、手作業だと毎回大変だったので、マクロ記録を使って自動的に印刷出来るようにしました

ところが一つだけ上手く行かなかったのが
今回の印刷範囲の指定でした

簡単な例を作成中なので後でアップします
2023/01/21(土) 13:39:30.09ID:3LuUMb1z0
>>750
毎日こんな表を作成しています

https://i.imgur.com/U2Pky8f.jpg
2023/01/21(土) 13:40:43.92ID:3LuUMb1z0
>>750
そして毎週こんな感じで縦向きの印刷をしています(右側の内訳は不要)

https://i.imgur.com/RpWsFui.jpg
2023/01/21(土) 13:41:54.11ID:3LuUMb1z0
>>750
そして毎月、売上が確定するとこんな感じで横向きの印刷をします

列の削除が必要となります

https://i.imgur.com/DfWRUBx.jpg
2023/01/21(土) 13:46:51.08ID:3LuUMb1z0
ほんとは
>>752
の上の表と下の表の間に担当者別の売上集計表があるので毎月、列の削除は行えずに右側の内訳をスライドして値複写して整形する必要が有ります

この作業が地味に面倒なのでマクロ記録で自動化しました
756デフォルトの名無しさん (ワッチョイ 6f19-1gWY)
垢版 |
2023/01/21(土) 14:05:07.15ID:hYuLYDCi0
>>749
Console 0,25,0,1とかで始まるやつか
文法こそ同じような部分はあるけど全くの別物だぞ
2023/01/21(土) 14:07:16.17ID:3LuUMb1z0
>>756
syntax error
2023/01/21(土) 14:10:22.83ID:qZakY6uUr
最初で最後のプログラミングが
年賀状当選ハガキ発見プログラムでした。。
2023/01/21(土) 14:55:21.95ID:Zr2lAE610
レコード総数どのくらいか判らんけど、回答待ってる間に別シートにコピーして並べ替えするだけで済むような
いくら零細だからって業務用途なら自社内で解決できるレベルに収めておかないと、引き継ぎに難儀するような
 ↓こういうのを参考にしてじぶんで懸命に制作してもいいかも知らんけど
https://forest.watch.impress.co.jp/docs/serial/exceltips/1306514.html  単なる受け売りじゃ応用利かなくなるだろうし
2023/01/21(土) 15:43:24.35ID:qZakY6uUr
>>759
そのくらいは使えるんだけど。
2023/01/21(土) 15:55:42.09ID:qZakY6uUr
数字掴むのはパワークエリやパワーピボットでなんとでもなるんだけど
今まである資料にキッチリ合わせた体裁にしないとならんところで苦労をしていて
2023/01/21(土) 16:26:39.90ID:qZakY6uUr
>>754
改めて考えたらこの横向きの印刷は苦労して無かったんだった
>>752
のシートを新規シートにコピーしてから不要列を削除してプリントするマクロ記録で出来るので

問題は
>>753
の印刷です

この表の下に2月分の納品予定、3月分の納品予定、4月、5月と続いていくので最終行を指定する事は出来なくて
印刷したい範囲はあくまでも当月の1月分までなので
2023/01/21(土) 16:46:59.18ID:H5hcEaoi0
>>752-754
1 日次を人間が更新 or 印刷
2 1を元に週次で印刷
3 1を元に月次で印刷
ということなら、シートをあらかじめ上記3つに分ける方向で考えた方がいいんじゃないかね
ご存知かもしれないけど「Excel VBA やりたい事」でぐぐれば大抵の事は出てくるよ
取り急ぎ動的な範囲選択の記述の仕方とか判ればVBAの文法とかあやふやでも全然いけそうだけど
2023/01/21(土) 16:50:11.61ID:qZakY6uUr
>>763
ああ、なるほど、確かに
固定フォーマットに数字だけ行くように出来れば良いのかなと思ったけど
会社も毎月変わるから難しいかな
あと売上高の多い順だし
2023/01/21(土) 16:58:34.85ID:Zr2lAE610
何度も聞くけど「印刷範囲」の設定ってどうやってる? マウスで印刷したい範囲をドラッグ選択して印刷範囲に設定するだけなんだけど?
月ごとに微妙に行数が増減するから用紙からはみ出るとかの懸念? Excelの初歩の初歩のような気がしてきた
2023/01/21(土) 17:11:10.91ID:pNicHJvH0
必要な情報を配列に入れ込んで
それで新しいシートを作り直したらどうでしょう?

新しいシートは手作業でフォーマットしておくか
VBAで印刷範囲の列数行数を取得して
配列から取り出してセルに代入するとか

誤って元データを失わないように
シートの追加削除はあまりどうなんだろうって気がします
2023/01/21(土) 17:26:56.30ID:qZakY6uUr
>>765
いや、だから関数とか印刷範囲の設定で済まないので悩んでいるわけです
それだけで済むならマクロ記録で終了です

不要範囲の削除で関数の連携が無くなるから
数値コピーしたり
手動の整形を伴うのと

毎月売上の会社は一定じゃないし
2023/01/21(土) 17:34:58.85ID:qZakY6uUr
>>766
元データを失わないように
元データからマクロで読み込んでコピーファイルを作成して、そこで作業を行ってから終了時にマクロで元データに書き込むようにはしています。。

売上の最新情報は他の人と共有しているファイルになるので、これもコピーファイルを作成してからデータを新しいシートにコピペして、パワークエリを使ってそのファイルから読み込んで毎度自動更新するようにしています

定形フォーマット(シート)を使ってVBAで行数を決められると確かに良いですね
769デフォルトの名無しさん (ブーイモ MM7f-Njuq)
垢版 |
2023/01/21(土) 17:41:46.80ID:zrHjWBn6M
>>768
なんか頭のハゲた人がいっぱいいそうな会社だなあ。
2023/01/21(土) 17:57:20.75ID:Zr2lAE610
ダメだこりゃ 行や列の非表示とかも知らなそう
たぶん「書き間違えました」とか訂正あるんだろうけど、>作業を行ってから終了時にマクロで元データに書き込むようにはしています
これはやっちゃいけない最たるものじゃないのか? 元ファイルと作業ファイルは一方通行にしとかなきゃ、戻してどうすんだ
40年前にBASIC触った世代? なんかアタマでっかちで実務に向いてない 縦書き横書きすら誤用してるのにいっちょまえな用語駆使しようとして伝わらない
すまんがサジ投げる 君らに任せた
2023/01/21(土) 17:58:03.03ID:qZakY6uUr
>>769
残念ながら剥げてるのは俺一人
2023/01/21(土) 17:58:43.35ID:qZakY6uUr
>>770
いやいや他の人はともかくあなただけ異次元にレベル低い
パワーピボットとか使って無いでしょ
2023/01/21(土) 18:11:05.02ID:qZakY6uUr
>>770
他の優秀な方は皆さん理解出来るのに一人だけトンチンカンなVBAスレにいてはいけないレベルのような

列の非表示をしたらその下の担当者別の列まで非表示になるから
範囲指定や非常時でなんとかなるレベルじゃないでしょ

じゃあなたにVBAの質問して答えられるのかな?
2023/01/21(土) 18:14:32.74ID:qZakY6uUr
>>770
元ファイルは自分だけの使っているファイルだから問題無し
共有ファイルは参照するだけで元には戻さない 
なんで書いてる事を理解出来ないのかな
775デフォルトの名無しさん (ブーイモ MM7f-Njuq)
垢版 |
2023/01/21(土) 18:47:58.93ID:zrHjWBn6M
>>774
このハゲ!
                 
      / ̄ ̄ ̄ ̄ ̄ ̄\
    /             \
   /                  ヽ 
    l:::::::::.                  | 
    |::::::::::   (●)     (●)   | 
   |:::::::::::::::::   \___/     |  
    ヽ:::::::::::::::::::.  \/     ノ
2023/01/21(土) 18:49:06.36ID:qZakY6uUr
>>775
オマエモナー

久しぶりに書いたなこれ
777デフォルトの名無しさん (ブーイモ MM7f-Njuq)
垢版 |
2023/01/21(土) 18:51:29.36ID:zrHjWBn6M
(爆)
2023/01/21(土) 18:51:32.42ID:qZakY6uUr
ほんとは表示がなんでも良ければ
>>752
こんな内容はパワークエリとパワーピボットで、何もしなくても常に最新データに書き換えられるんだけどな。。
といつも思いながらEXCELの加工してます
779デフォルトの名無しさん (スッップ Sd1f-RQPf)
垢版 |
2023/01/21(土) 19:34:50.38ID:rwfwwGNyd
零細企業だからこんな馬鹿しか雇えないのかね
2023/01/21(土) 19:38:29.43ID:qZakY6uUr
>>779
馬鹿に出来るほどの回答してないよね?
2023/01/21(土) 20:00:29.29ID:liCBEODDH
>>752
連想配列、多次元配列を使えば、好きな項目を紐づけでき
表示も好きなようにできるので楽だと思います
一度覚えたら重宝しますのでいつか学んでみたらいかがでしょう?
VBAの学習はネットで十分ですし是非

例えばシートから顧客名を取得して
顧客名をキーワードにして、製品名、単価、数量、担当者名を配列に格納し
単価×売上高の多い順に配列をソートして、配列から必要な表示項目だけセルに代入する
そうやって処理すれば担当者別であれ製品別であれ好きなように表示できます
その後、罫線処理をして、最後に幅調整をしてあげればって思います
782デフォルトの名無しさん (スッップ Sd1f-RQPf)
垢版 |
2023/01/21(土) 20:08:19.63ID:rwfwwGNyd
>>780
あまりにも馬鹿過ぎるから馬鹿と指摘しているのだが
こんなのしか雇えないから零細企業のままなのか、零細企業だからこんなの雇っちゃうのか
2023/01/21(土) 20:10:55.81ID:qZakY6uUr
>>782
あ、
(ワッチョイ 53da-Jpma)

がスマホで書いてるだけか
784デフォルトの名無しさん (ワッチョイ 638e-RQPf)
垢版 |
2023/01/21(土) 20:12:17.60ID:HFKnvzRq0
今度は言い掛かりを始めた馬鹿
2023/01/21(土) 20:15:45.52ID:qZakY6uUr
>>784
ほらバレて脊髄反射w
786デフォルトの名無しさん (ワッチョイ 638e-RQPf)
垢版 |
2023/01/21(土) 20:18:33.47ID:HFKnvzRq0
馬鹿の質問はそもそも馬鹿が考えることだから問題解決へのアプローチが間違えている
というか端的に言えば馬鹿だから馬鹿な発想しかできないから解決方法がややこしくなり何倍も何十倍も時間が必要になる
2023/01/21(土) 20:21:20.82ID:qZakY6uUr
とりま馬鹿はNG
788デフォルトの名無しさん (ワッチョイ 638e-RQPf)
垢版 |
2023/01/21(土) 20:23:35.37ID:HFKnvzRq0
逃げた
2023/01/21(土) 20:23:44.73ID:qZakY6uUr
>>781
ありがとうございます

他は全てワンボタンで済んだので
あと表示だけが手動なので
そのために時間掛ける価値があるかどうテンピンに掛けながら
でもこういうのは嫌いじゃ無いので学んでみます
2023/01/21(土) 20:28:47.01ID:qiWRJhmvM
>>786
わかる。こういう奴に任せるといつまで経ってもまともな成果が上がらない。
2023/01/21(土) 20:34:39.84ID:liCBEODDH
>>789
なんかスレッドが熱いですけど気にせずがんばってください

配列はデータベースみたいなものなのでエクセルと相性がいいんです
とても便利ですので是非がんばってください
2023/01/21(土) 21:38:19.62ID:ALAIHDfad
煽るヤカラに反応してるとスレが荒れていつも回答してくれる人も敬遠しちゃうぞ
月別のレイアウト範囲を決めるなら参考の表なら
開始は「月売上高表」の文字列が入っている行
最後は「納品予定」の文字列が入っている行を見つけて最後の金額が入ってる行を取得すれば>>747のコードが流用できるんじゃないの
2023/01/21(土) 21:55:48.52ID:qZakY6uUr
>>791
早速、YouTubeの金子さんの動画を見ました
今まで外国語に見えてたのが理解出来て来ました
2023/01/21(土) 21:57:12.93ID:qZakY6uUr
>>792
ありがとうございます

最終行に、色を白で「最終行」と入れて
それを拾おうかと
2023/01/21(土) 22:09:21.22ID:WRTpu51ud
>>794
うざい
2023/01/21(土) 22:31:20.27ID:liCBEODDH
>>789
もし嫌じゃないのなら才能というか適性あります
VBAから入ってある程度楽しいなって思えたら
pythonとかjava、C#とかやってみたらいいと思います
2023/01/22(日) 04:34:19.88ID:K9eOTOpDr
>>792
その印刷したい最後の行≒「途中の行」の場合はどのように指定したら良いんでしょうか?

売上先の数が毎月一定では無いので印刷したい最後の行が毎月変わってしまうのです

「売上最終行」「売上最終列」
「納品最終行」「納品最終列」
を透明な文字で埋め込んで認識させるのが良いのかなと
2023/01/22(日) 04:41:38.79ID:hOwNbSAHr
>>796
もともと1982年にマイコン(パソコン)を買ったくらいなので好きな方だと思います
2023/01/22(日) 06:11:47.65ID:wUjIjG/wd
>>797
vba 最終行
vba 最終列

でぐぐる
2023/01/22(日) 06:47:36.72ID:hOwNbSAHr
>>799
ありがとうございます
ググりましたが本当の最終行の説明しか無くて

上に書いた通り、実際には途中に存在する
任意の最終行(実際には途中の行)の説明が無いのですが
2023/01/22(日) 06:54:51.41ID:1NpPY/pKa
CSV などのテキスト処理なら、Ruby
2023/01/22(日) 06:55:38.90ID:5nd4WcY/0
>>797
どれを印刷したいのかよくわからんけど >>752-753 なら納品予定の列を見て空になった行のひとつ上、>>754 なら得意先名の列を見て合計となって行までを印刷すりゃいいんじゃないの?
って>>792は言ってるんだが?
そもそも
> 印刷したい最後の行≒「途中の行」
とか意味不明すぎる
2023/01/22(日) 07:02:04.85ID:hOwNbSAHr
マクロを使ってそのシートを新規シートにコピーしてから不要行や不要列を削除して、その後に最終行と最終列を指定して印刷すれば良いのかな
2023/01/22(日) 07:03:38.95ID:hOwNbSAHr
>>802
言葉でそのように説明するのは簡単だけど
具体的にVBAで書けますbゥ?
2023/01/22(日) 07:12:25.00ID:hOwNbSAHr
毎日
752のシートを毎日作成していて
そのシートを元に
753や754のような印刷結果としたいのです

上の画像が失敗したのは
確かに非表示で済むような画像になってしまいましたが
実際には列の非常時を使うと印刷したい列まで隠れてしまうので非表示は使えません
2023/01/22(日) 07:19:41.79ID:hOwNbSAHr
もう一度書くと

作成しているのはこの表


https://i.imgur.com/MNy37BM.jpg
2023/01/22(日) 07:21:57.46ID:hOwNbSAHr
>>806
806の赤い部分にも文字が入ってるとして


印刷したいのは806を元にして
これらが印刷結果となるように



https://i.imgur.com/JUP2t7B.jpg

https://i.imgur.com/LhkqS7p.jpg
2023/01/22(日) 07:28:29.54ID:hOwNbSAHr
実際の数字は販売管理ソフトから吐き出したデータをパワークエリとパワーピボットによってリアルタイムにデータを見ることは出来ています
その他の付随情報をEXCELで管理していて、そのEXCELデータと販売管理ソフトが正しいかどうかのチェックもそのEXCELファイルで行っています
2023/01/22(日) 07:32:21.84ID:hOwNbSAHr
20年前からパワークエリやパワーピボットが存在していれば、その結果を元に報告資料を作っていたんだろうけど、存在しない時代に手動で作成していたのでそれに合わせる事に苦労してるということです
2023/01/22(日) 08:09:47.45ID:5nd4WcY/0
>>804
>>807の表はできてるんだろ?
得意先名の列がB列としたら
Dim Row As Long
Row = 1
While Cell(Row, "B").Value <> ”合計"
Row = Row + 1
WEnd
ってやるだけだろ
2023/01/22(日) 08:52:06.84ID:LXKdZzsm0
BASIC知ってるはずなのに配列知らんのか
2023/01/22(日) 09:17:23.76ID:Hx9JKMaXr
>>810
ありがとう
行か列を任意を指定してキーワードを見つければ良いんですね


>>811
BASIC自体を知ってるのでは無く
その当時、マイコンを買って
雑誌の記事を見て自分用にカスタマイズしただけ
主にカセットテープから20分くらいLoadしてゼビウスとかやってた
2023/01/22(日) 09:18:35.16ID:Hx9JKMaXr
適当に打つとsyntax errorが出てくる事は知ってる
2023/01/22(日) 13:00:42.70ID:vQS42HbD0
連想配列のコレクションを使いたいんだが、個別の要素が書き換えられない。
書き換えると全要素が書き関わってしまう???
これはどうしたらいい?
Set Yukkuri = New Dictionary '「Microsoft Scripting Runtime」を参照設定
Dim timeline As New Collection
Yukkuri.Add "Name", "霊夢"
Yukkuri.Add "serif", "霊夢です"
timeline.Add Yukkuri
'セリフを追加する
timeline.Add Yukkuri
Debug.Print "--before--"
Debug.Print timeline.Item(1)("Name"), timeline.Item(1)("serif")
Debug.Print timeline.Item(2)("Name"), timeline.Item(2)("serif")
'追加したセリフの変更
timeline.Item(2)("Name") = "魔理沙"
timeline.Item(2)("serif") = "魔理沙だぜ"
Debug.Print "--after--"
Debug.Print timeline.Item(1)("Name"), timeline.Item(1)("serif")
Debug.Print timeline.Item(2)("Name"), timeline.Item(2)("serif")

実行すると
--before--
霊夢 霊夢です
霊夢 霊夢です
--after--
魔理沙 魔理沙だぜ ←こっちも書き換わってる
魔理沙 魔理沙だぜ
2023/01/22(日) 13:08:27.56ID:CdSwQQ4cd
>>806
自分が何もできないから100%他人任せにしてるような割りに態度が少し横柄なんじゃねと思わなくもないんだよね
少なくとも>>806の月別の表が何か月分も同じシートにあるのであれば
・シートを2つコピーして>>807用の2つのシートを作る
・それぞれのシートで1行目から最終行まで検索する
・月別の始点はA列?の「月売上高表」の文字列が含まれる行
 終点は次の月の「月売上高表」の文字列が含まれる行の-1
 ※ただし最終月は翌月の文字列が見つからないので最終行でよい
これをもとにそれぞれのシートの行を非表示にしたり、列を非表示にして
印刷範囲決めたらいいだけなんじゃないの
ここまでの説明はマクロで可能
俺はやる気のあるコードを見せてくれたりする人には付き合う気はあるけど
100%他人任せには構ってられないから以降は他の人が回答してくれることを祈るわ
2023/01/22(日) 13:23:01.10ID:0592ee0wr
>>815
私ってサバサバしてるから
2023/01/22(日) 13:29:43.69ID:5nd4WcY/0
>>814
そりゃ連想配列の実体は1つしか作ってないから書き換えたら変わるわな
いまいちどういう結果を期待してるのかよくわからんけど片方が変わって欲しくないなら
timeline.Add Yukkuri
Dim Yukkuri1 As New Dictionary
Dim Key As Variant
For Each Key In Yukkuri.Keys
Yukkuri1.Add Key, Yukkuri(Key)
Next
timeline.Add Yukkuri1
のように中身をコピーして作る
818デフォルトの名無しさん (スッップ Sd1f-RQPf)
垢版 |
2023/01/22(日) 14:10:36.46ID:3khvOI6Qd
また零細企業の馬鹿が粘着してるのか
しつこい馬鹿は迷惑
2023/01/22(日) 15:30:30.53ID:DNm1kf3fH
>>749
Sub main()
Dim arr() As Variant
arr = dataArr

End Sub

Function dataArr() As Variant()
Dim cel() As Long
cel(0) = Cells(Rows.Count, 1).End(xlUp).Row
cel(1) = Cells(1, Columns.Count).End(xlToLeft).Column

Dim rw, col As Long
Dim datas() As Variant
ReDim datas(cel(0), cel(1))

For rw = 0 To cel(0) - 2
For cl = 0 To cel(1) - 1
datas(rw, cl) = Cells(rw + 2, cl + 1)
Next cl
Next rw
dataArr = datas
End Function
2023/01/22(日) 15:30:46.23ID:DNm1kf3fH
これでmain関数の中のarrにすべてのデータが取り込めた
arr(0,1)はヨソバ〇カメラ
arr(1,5)は80000

2行目に、み〇なのさくら屋、売上金額、納品予定
3行目のE列に納品予定合計額を表示させたければ
cells(2,1)=arr(1,1)
cells(2,2)=arr(1,2)
cells(2,3)=arr(1,4)
と指定して表示し
合計はVBA内でfor分で合計値を算出するか
シートに転記後にworksheetFunction.sum()で合計を算出して表示すればどうでしょう

製品テーブル(略称含む)や顧客テーブル(略称含む)をシートで作って置ければ
さらに楽にできると思います
2023/01/22(日) 16:01:00.37ID:PpuiymMq0
>>820
それはデータ取り込みのためのVBAですね?

印刷のための範囲指定は

Sub tes()
'
' tes Macro
'

'
Range("A1:I69").Select ←ここの部分を書き換えると
ActiveSheet.PageSetup.PrintArea = "$A$1:$I$69"
Application.PrintCommunication = False
With ActiveSheet.PageSetup
.PrintTitleRows = ""
.PrintTitleColumns = ""
End With
Application.PrintCommunication = True
ActiveSheet.PageSetup.PrintArea = "$A$1:$I$69"
Application.PrintCommunication = False
With ActiveSheet.PageSetup


    途中省略

End With
Application.PrintCommunication = True
End Sub
2023/01/22(日) 16:06:26.01ID:DNm1kf3fH
>>821
どの程度の大きさのデータを印刷したいのかわからないですが
サンプル程度のデータ量でしたら配列を使って取り込みと出力をして
印刷設定はエクセル側で行えば十分かと思いましたけど
それではあまり役立ちませんか?
2023/01/22(日) 16:17:39.68ID:SHbanA0Dd
>>822
印刷設定をEXCEL側とは?
毎回手動で設定して印刷という話ですか?
データ取り込みは苦労していないというか既に自動化は諦めてるので

未納品状態から納品済に変わった段階で
下から消して上に書き込む作業を行わないとならんので。。
2023/01/22(日) 16:24:05.21ID:DNm1kf3fH
>>823
よく理解してなくてすみません
rangeの範囲指定だけ指定できたらOKなのでしょうか?

例えば、
Range("A1:I69")
printArea="$A$1:&i%69"
を指定したいってことでしょうか?
2023/01/22(日) 16:27:55.16ID:xRK/d49A0
>>819
1オリジンのRangeオブジェクトと0オリジンの配列のやり取りはどうやっても混乱するから
セルを配列に取り込む場合は「array = Range(範囲).Value」のようにRange.Valueで取り込んだ方がいいよ
これでRangeで指定した範囲の値が1オリジンの2次元配列として取得できる
逆に配列をセルに書き戻す場合も、Rangeとarrayの要素数が同じなら「Range(範囲).Value = array」で済む
これはVBAでシートを配列で扱う場合の常識だと思うので一応
2023/01/22(日) 16:35:26.12ID:DLw6jtzT0
おいおいおいおいw まーたハナシが変わって来てるw ま、それがこの人の個性っちゃあ個性だけどw
パワークエリやパワーピボットを駆使してマクロで一発で取り込むのは出来てる とか、大法螺だったんだな

彼の目的はただ一つ  会議資料として用紙の横書き印刷と縦書き印刷をしてる、その縦書き印刷を自動化したい その一点
横書きとか縦書きとかは彼の独特な表現だからA4ヨコ印刷・A4タテ印刷に脳内変換してくれ A版かB版か、4か3かは定かでは無いが、まあそんな風

で、彼のとっ散らかった説明・解説をまとめると以下の通りだ
販売管理ソフトで売り上げを管理 → 売上データをExcelに吐き出し(もしくはExcelから引っ張る) → そのデータをパワークエリやパワーピボットを
駆使して集計し、会議用資料のテンプレートに落とし込む https://i.imgur.com/MNy37BM.jpghttps://i.imgur.com/JUP2t7B.jpg これはヨコ印刷で
問題無し https://i.imgur.com/LhkqS7p.jpg これのタテ印刷に苦心してる
何故なら :
  1] 二列不要だから削除したいが、削除すると「関数」が無くなって違算(エラー)←??
  2] 毎月行数の増減があるので最終行が決まらない ←必要なら「※」なり「最終行」なりを手入力してでもマクロを走らせるのの役に立てたい←???
  3] 画像には無いが、この他に担当者別売上の表がある ←最初の画像の赤丸位置?それとも上下の表の中間?
  4] これが1Sheetに1年12ヶ月分タテに並んでいるので各月自在に印刷するのは大変
ざっくりとこんな感じ
2023/01/22(日) 16:36:20.85ID:zZKA7THFr
>>824
印刷したい印刷範囲の右下が毎回変わるので

例えばそこに
「END」という透明文字を書き入れておく場合にはどのような記述となりますか?

これさえ出来れば自分のやりたい事が出来そうです
2023/01/22(日) 16:43:18.47ID:zZKA7THFr
>>826
同じ取引に対してデータ元が2つ有り

パワークエリとパワーピボットで自動取込をするのは販売管理ソフトのデータからが1つ目
こちらは自動的に取り込まれていて
簡単に得意先別、担当者別、商品別の合計や詳細は把握出来る


EXCELで報告資料を作る元データは、他の人が社内共有用に作っているEXCELファイルから

この2つのデータが合っている事を確認する必要もある


最初の質問から有りとあらゆる事を書き出すなんて無理だよ

後から話が違うと言われようが
説明するために簡便化した資料でやってるんだし
てゆーかあなたはVBAの技術は無いんだから無理に話に加わらなくても良いよ
2023/01/22(日) 16:47:09.62ID:DLw6jtzT0
で、それはVBAで出来るならそれでもいいけど、普通の機能でも十分賄える作業
範囲に名前を付けて(例えば01y とか01t とか)印刷時にページ設定のダイアログにその名前を入れて印刷するだけ
(もしくは、名前ボックスで選択して[印刷範囲に設定]でもいい ソッチのが楽かも)
範囲が重複しても名前付けは出来るんだし、せっかくの機能を使わない手は無い
11月に成ったら11yや11tを入れてやるだけで広範囲のうちそこだけをプレビューしてくれる
範囲が増減するってなら Offset使った範囲にしとけば行が増えても対応してくれる その名前付けを上手にできるかどうかがカギ
2023/01/22(日) 16:50:46.58ID:zZKA7THFr
販売管理ソフトに全ての詳細情報を付加する機能が無いから、会社に必要な付随情報をEXCELで付与して管理させている

だから一つの取引に対して2つデータが存在してる
2023/01/22(日) 16:53:25.56ID:DNm1kf3fH
>>827
Sub main()
Dim rng As Range
Set rng = Range(Cells(1, 1), Cells(2, 2)) '①

ActiveSheet.PageSetup.PrintArea = rng.Address
End Sub

みたいな感じで、①を都度指定したらできませんか?
2023/01/22(日) 16:53:33.27ID:zZKA7THFr
>>829
そんな事するよりも

>>827
これを一発VBAに入れた方が楽じゃね?
2023/01/22(日) 16:55:27.93ID:zZKA7THFr
EXCELのデータが正しい事もあれば
販売管理ソフトのデータが正しい事もあるので
二重にすることで間違いのチェックにはなっていると思う
2023/01/22(日) 17:00:57.08ID:uavb1b440
一元管理されてない時点で最悪のデータ
2023/01/22(日) 17:04:14.11ID:zZKA7THFr
一元管理は入力ミスがあるとそのまま行ってしまう恐ろしさがある
2023/01/22(日) 17:04:15.06ID:DNm1kf3fH
>>827
最終行列を取得して範囲指定するのなら
cells(rowscount,1).end(xlup).row
cells(1,columns.count).end(xltoleft).column
で最終行列を所得できます

キーワードを使った場合、
cells.find('end')でオブジェクトを取得しますけど
他のセルにキーワードが紛れていたら終わりますので非推奨かもですね

キーワードを最終セルにするというのなら
findを使って最終セルを取得して範囲指定に利用できそうですね
2023/01/22(日) 17:06:06.74ID:zZKA7THFr
>>831

単純に印刷したい範囲の右下に
ENDとか※とか右下とかの文字を入れ込んでおいてそれをVBAにするのは難しいものなのですか?
2023/01/22(日) 17:06:29.53ID:DLw6jtzT0
そもそもが、全体のデータをどう扱うかのイメージが出来ていない
都度継ぎ接ぎだらけの思い付き・間違ったインスピレーションで作業しているだけ システムの九龍城砦を築いてるようなもの
毎月最終行に「最終行」って手入力することが自動化の助けに成ると思うならそうしてみりゃいい
その手間の時間で印刷終わってる 何月がいちばん上の月か知らんが、年度途中の月、7月とか8月でもそれで動作するシステム組めるのか?
ボタンを12ヶ並べるつもり? 年度途中の月を印刷するためにひとつのボタンで解決させるには、もっと苦労を重ねるけど?
プログラムを書くためにExcel使ってるんじゃ無い 楽するために使ってんだ  
2023/01/22(日) 17:06:34.14ID:zZKA7THFr
>>836
すんません
入れ違いで書いてしまいました
2023/01/22(日) 17:08:34.65ID:zZKA7THFr
>>838
仕方が無いじゃん
自分で作ったシステムじゃないんだし
前任者が全て手動で半日掛かった仕事を5分で出来るようになっただけでもマシになったとは思う
2023/01/22(日) 17:10:50.88ID:DNm1kf3fH
>>839
いえいえ、こちらこそ要領が悪くてすみません
findでキーワードを検索して、該当セルを取得したら
そのセルが何行目何列目なのかを取得できますので
それを>>821の範囲に利用してみたらいけるかもですね
2023/01/22(日) 17:11:53.93ID:PpuiymMq0
>>838
月に一回だけ
ENDと入れるだけで
一ヶ月にかなりの時間を節約出切るのが分からない??

行や列を挿入するだけだから
ENDと入れるのは一回だけ

なんなら前月のシートを使えば、それすら要らなくなる

ほんとお前は性格悪いね
2023/01/22(日) 17:13:22.05ID:PpuiymMq0
>>841
キーワードを
ピロリちゃんとか
絶対に使わないであろう言葉を使えば良いかもですね
2023/01/22(日) 17:26:29.02ID:zZKA7THFr
縦向きえんど
横向きえんど

この文字を透明色で埋めておけば良いかな
上書き出来ないようにセルを保護しておく?

そうすりゃ毎月何も設定しなくても良くなりますね
845デフォルトの名無しさん (ワッチョイ 7f74-Njuq)
垢版 |
2023/01/22(日) 18:32:47.51ID:Km84h4+z0
>>844
そんなことより「ハゲでも分かるExcel VBA入門」という本を読めばいい。
分かりやすくてすぐ上達。
2023/01/22(日) 18:34:23.97ID:5nd4WcY/0
>>835
入力チェックはまた別の話
帳票毎にデータが違う方が怖いわ
2023/01/22(日) 18:35:54.62ID:zZKA7THFr
>>845
ワタシサバサバしてるので
2023/01/22(日) 18:36:29.31ID:zZKA7THFr
>>846
別の話じゃないよ
2023/01/22(日) 18:51:11.61ID:vQS42HbD0
>>817
レスサンクスです。
ということはYukkuriが100人いたら、
Dim Yukkuri?? As New Dictionaryを100行要るてことになるてこと?
timeline.Add Yukkuriのところで、timelineが使ってるメモリが追加でアロケートされ、
そこに連想配列が追加されるていう動きにならんのかね?
それか連想配列の実体をコピーできるとか。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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