[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 02/25 03:25 / Filesize : 313 KB / Number-of Response : 1018
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Excel VBA 質問スレ Part78



1 名前:デフォルトの名無しさん mailto:sage [2022/10/30(日) 13:43:16.31 ID:6yf2E1Gz0.net]
!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

802 名前:デフォルトの名無しさん mailto:sage [2023/01/21(土) 20:34:39.84 ID:liCBEODDH.net]
>>789
なんかスレッドが熱いですけど気にせずがんばってください

配列はデータベースみたいなものなのでエクセルと相性がいいんです
とても便利ですので是非がんばってください

803 名前:デフォルトの名無しさん mailto:sage [2023/01/21(土) 21:38:19.62 ID:ALAIHDfad.net]
煽るヤカラに反応してるとスレが荒れていつも回答してくれる人も敬遠しちゃうぞ
月別のレイアウト範囲を決めるなら参考の表なら
開始は「月売上高表」の文字列が入っている行
最後は「納品予定」の文字列が入っている行を見つけて最後の金額が入ってる行を取得すれば>>747のコードが流用できるんじゃないの

804 名前:デフォルトの名無しさん mailto:sage [2023/01/21(土) 21:55:48.52 ID:qZakY6uUr.net]
>>791
早速、YouTubeの金子さんの動画を見ました
今まで外国語に見えてたのが理解出来て来ました

805 名前:デフォルトの名無しさん mailto:sage [2023/01/21(土) 21:57:12.93 ID:qZakY6uUr.net]
>>792
ありがとうございます

最終行に、色を白で「最終行」と入れて
それを拾おうかと

806 名前:デフォルトの名無しさん mailto:sage [2023/01/21(土) 22:09:21.22 ID:WRTpu51ud.net]
>>794
うざい

807 名前:デフォルトの名無しさん mailto:sage [2023/01/21(土) 22:31:20.27 ID:liCBEODDH.net]
>>789
もし嫌じゃないのなら才能というか適性あります
VBAから入ってある程度楽しいなって思えたら
pythonとかjava、C#とかやってみたらいいと思います

808 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 04:34:19.88 ID:K9eOTOpDr.net]
>>792
その印刷したい最後の行≒「途中の行」の場合はどのように指定したら良いんでしょうか?

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

「売上最終行」「売上最終列」
「納品最終行」「納品最終列」
を透明な文字で埋め込んで認識させるのが良いのかなと

809 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 04:41:38.79 ID:hOwNbSAHr.net]
>>796
もともと1982年にマイコン(パソコン)を買ったくらいなので好きな方だと思います

810 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 06:11:47.65 ID:wUjIjG/wd.net]
>>797
vba 最終行
vba 最終列

でぐぐる



811 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 06:47:36.72 ID:hOwNbSAHr.net]
>>799
ありがとうございます
ググりましたが本当の最終行の説明しか無くて

上に書いた通り、実際には途中に存在する
任意の最終行(実際には途中の行)の説明が無いのですが

812 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 06:54:51.41 ID:1NpPY/pKa.net]
CSV などのテキスト処理なら、Ruby

813 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 06:55:38.90 ID:5nd4WcY/0.net]
>>797
どれを印刷したいのかよくわからんけど >>752-753 なら納品予定の列を見て空になった行のひとつ上、>>754 なら得意先名の列を見て合計となって行までを印刷すりゃいいんじゃないの?
って>>792は言ってるんだが?
そもそも
> 印刷したい最後の行≒「途中の行」
とか意味不明すぎる

814 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 07:02:04.85 ID:hOwNbSAHr.net]
マクロを使ってそのシートを新規シートにコピーしてから不要行や不要列を削除して、その後に最終行と最終列を指定して印刷すれば良いのかな

815 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 07:03:38.95 ID:hOwNbSAHr.net]
>>802
言葉でそのように説明するのは簡単だけど
具体的にVBAで書けますbゥ?

816 名前:デフォャ泣gの名無しさb mailto:sage [2023/01/22(日) 07:12:25.00 ID:hOwNbSAHr.net]
毎日
752のシートを毎日作成していて
そのシートを元に
753や754のような印刷結果としたいのです

上の画像が失敗したのは
確かに非表示で済むような画像になってしまいましたが
実際には列の非常時を使うと印刷したい列まで隠れてしまうので非表示は使えません

817 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 07:19:41.79 ID:hOwNbSAHr.net]
もう一度書くと

作成しているのはこの表


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

818 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 07:21:57.46 ID:hOwNbSAHr.net]
>>806
806の赤い部分にも文字が入ってるとして


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



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

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

819 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 07:28:29.54 ID:hOwNbSAHr.net]
実際の数字は販売管理ソフトから吐き出したデータをパワークエリとパワーピボットによってリアルタイムにデータを見ることは出来ています
その他の付随情報をEXCELで管理していて、そのEXCELデータと販売管理ソフトが正しいかどうかのチェックもそのEXCELファイルで行っています

820 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 07:32:21.84 ID:hOwNbSAHr.net]
20年前からパワークエリやパワーピボットが存在していれば、その結果を元に報告資料を作っていたんだろうけど、存在しない時代に手動で作成していたのでそれに合わせる事に苦労してるということです



821 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 08:09:47.45 ID:5nd4WcY/0.net]
>>804
>>807の表はできてるんだろ?
得意先名の列がB列としたら
Dim Row As Long
Row = 1
While Cell(Row, "B").Value <> ”合計"
Row = Row + 1
WEnd
ってやるだけだろ

822 名前:デフォルトの名無しさん (ワッチョイ f34a-+xDT) mailto:sage [2023/01/22(日) 08:52:06.84 ID:LXKdZzsm0.net]
BASIC知ってるはずなのに配列知らんのか

823 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 09:17:23.76 ID:Hx9JKMaXr.net]
>>810
ありがとう
行か列を任意を指定してキーワードを見つければ良いんですね


>>811
BASIC自体を知ってるのでは無く
その当時、マイコンを買って
雑誌の記事を見て自分用にカスタマイズしただけ
主にカセットテープから20分くらいLoadしてゼビウスとかやってた

824 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 09:18:35.16 ID:Hx9JKMaXr.net]
適当に打つとsyntax errorが出てくる事は知ってる

825 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 13:00:42.70 ID:vQS42HbD0.net]
連想配列のコレクションを使いたいんだが、個別の要素が書き換えられない。
書き換えると全要素が書き関わってしまう???
これはどうしたらいい?
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--
魔理沙 魔理沙だぜ ←こ

826 名前:チちも書き換わってる
魔理沙 魔理沙だぜ
[]
[ここ壊れてます]

827 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 13:08:27.56 ID:CdSwQQ4cd.net]
>>806
自分が何もできないから100%他人任せにしてるような割りに態度が少し横柄なんじゃねと思わなくもないんだよね
少なくとも>>806の月別の表が何か月分も同じシートにあるのであれば
・シートを2つコピーして>>807用の2つのシートを作る
・それぞれのシートで1行目から最終行まで検索する
・月別の始点はA列?の「月売上高表」の文字列が含まれる行
 終点は次の月の「月売上高表」の文字列が含まれる行の-1
 ※ただし最終月は翌月の文字列が見つからないので最終行でよい
これをもとにそれぞれのシートの行を非表示にしたり、列を非表示にして
印刷範囲決めたらいいだけなんじゃないの
ここまでの説明はマクロで可能
俺はやる気のあるコードを見せてくれたりする人には付き合う気はあるけど
100%他人任せには構ってられないから以降は他の人が回答してくれることを祈るわ

828 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 13:23:01.10 ID:0592ee0wr.net]
>>815
私ってサバサバしてるから

829 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 13:29:43.69 ID:5nd4WcY/0.net]
>>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
のように中身をコピーして作る

830 名前:デフォルトの名無しさん [2023/01/22(日) 14:10:36.46 ID:3khvOI6Qd.net]
また零細企業の馬鹿が粘着してるのか
しつこい馬鹿は迷惑



831 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 15:30:30.53 ID:DNm1kf3fH.net]
>>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

832 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 15:30:46.23 ID:DNm1kf3fH.net]
これで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()で合計を算出して表示すればどうでしょう

製品テーブル(略称含む)や顧客テーブル(略称含む)をシートで作って置ければ
さらに楽にできると思います

833 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 16:01:00.37 ID:PpuiymMq0.net]
>>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

834 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 16:06:26.01 ID:DNm1kf3fH.net]
>>821
どの程度の大きさのデータを印刷したいのかわからないですが
サンプル程度のデータ量でしたら配列を使って取り込みと出力をして
印刷設定はエクセル側で行えば十分かと思いましたけど


835 名前:それではあまり役立ちませんか? []
[ここ壊れてます]

836 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 16:17:39.68 ID:SHbanA0Dd.net]
>>822
印刷設定をEXCEL側とは?
毎回手動で設定して印刷という話ですか?
データ取り込みは苦労していないというか既に自動化は諦めてるので

未納品状態から納品済に変わった段階で
下から消して上に書き込む作業を行わないとならんので。。

837 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 16:24:05.21 ID:DNm1kf3fH.net]
>>823
よく理解してなくてすみません
rangeの範囲指定だけ指定できたらOKなのでしょうか?

例えば、
Range("A1:I69")
printArea="$A$1:&i%69"
を指定したいってことでしょうか?

838 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 16:27:55.16 ID:xRK/d49A0.net]
>>819
1オリジンのRangeオブジェクトと0オリジンの配列のやり取りはどうやっても混乱するから
セルを配列に取り込む場合は「array = Range(範囲).Value」のようにRange.Valueで取り込んだ方がいいよ
これでRangeで指定した範囲の値が1オリジンの2次元配列として取得できる
逆に配列をセルに書き戻す場合も、Rangeとarrayの要素数が同じなら「Range(範囲).Value = array」で済む
これはVBAでシートを配列で扱う場合の常識だと思うので一応

839 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 16:35:26.12 ID:DLw6jtzT0.net]
おいおいおいおいw まーたハナシが変わって来てるw ま、それがこの人の個性っちゃあ個性だけどw
パワークエリやパワーピボットを駆使してマクロで一発で取り込むのは出来てる とか、大法螺だったんだな

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

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

840 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 16:36:20.85 ID:zZKA7THFr.net]
>>824
印刷したい印刷範囲の右下が毎回変わるので

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

これさえ出来れば自分のやりたい事が出来そうです



841 名前:デフォルトの名無しさん (オッペケ Src7-a63L) mailto:sage [2023/01/22(日) 16:43:18.47 ID:zZKA7THFr.net]
>>826
同じ取引に対してデータ元が2つ有り

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


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

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


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

後から話が違うと言われようが
説明するために簡便化した資料でやってるんだし
てゆーかあなたはVBAの技術は無いんだから無理に話に加わらなくても良いよ

842 名前:デフォルトの名無しさん (ワッチョイ 53da-Jpma) mailto:sage [2023/01/22(日) 16:47:09.62 ID:DLw6jtzT0.net]
で、それはVBAで出来るならそれでもいいけど、普通の機能でも十分賄える作業
範囲に名前を付けて(例えば01y とか01t とか)印刷時にページ設定のダイアログにその名前を入れて印刷するだけ
(もしくは、名前ボックスで選択して[印刷範囲に設定]でもいい ソッチのが楽かも)
範囲が重複しても名前付けは出来るんだし、せっかくの機能を使わない手は無い
11月に成ったら11yや11tを入れてやるだけで広範囲のうちそこだけをプレビューしてくれる
範囲が増減するってなら Offset使った範囲にしとけば行が増えても対応してくれる その名前付けを上手にできるかどうかがカギ

843 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 16:50:46.58 ID:zZKA7THFr.net]
販売管理ソフトに全ての詳細情報を付加する機能が無いから、会社に必要な付随情報をEXCELで付与して管理させている

だから一つの取引に対して2つデータが存在してる

844 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 16:53:25.56 ID:DNm1kf3fH.net]
>>827
Sub main()
Dim rng As Range
Set rng = Range(Cells(1, 1), Cells(2, 2)) '①

ActiveSheet.PageSetup.PrintArea = rng.Address
End Sub

みたいな感じで、①を都度指定したらできませんか?

845 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 16:53:33.27 ID:zZKA7THFr.net]
>>829
そんな事するよりも

>>827
これを一発VBAに入れた方が楽じゃね?

846 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 16:55:27.93 ID:zZKA7THFr.net]
EXCELのデータが正しい事もあれば
販売管理ソフトのデータが正しい事もあるので
二重にすることで間違いのチェックにはなっていると思う

847 名前:デフォルトの名無しさん (ワッチョイ d3ce-Jpma) mailto:sage [2023/01/22(日) 17:00:57.08 ID:uavb1b440.net]
一元管理されてない時点で最悪のデータ

848 名前:デフォルトの名無しさん (オッペケ Src7-a63L) mailto:sage [2023/01/22(日) 17:04:14.11 ID:zZKA7THFr.net]
一元管理は入力ミスがあるとそのまま行ってしまう恐ろしさがある

849 名前:デフォルトの名無しさん (JP 0Hc7-j5s0) mailto:sage [2023/01/22(日) 17:04:15.06 ID:DNm1kf3fH.net]
>>827
最終行列を取得して範囲指定するのなら
cells(rowscount,1).end(xlup).row
cells(1,columns.count).end(xltoleft).column
で最終行列を所得できます

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

キーワードを最終セルにするというのなら
findを使って最終セルを取得して範囲指定に利用できそうですね

850 名前:デフォルトの名無しさん (オッペケ Src7-a63L) mailto:sage [2023/01/22(日) 17:06:06.74 ID:zZKA7THFr.net]
>>831

単純に印刷したい範囲の右下に
ENDとか※とか右下とかの文字を入れ込んでおいてそれをVBAにするのは難しいものなのですか?



851 名前:デフォルトの名無しさん (ワッチョイ 53da-Jpma) mailto:sage [2023/01/22(日) 17:06:29.53 ID:DLw6jtzT0.net]
そもそもが、全体のデータをどう扱うかのイメージが出来ていない
都度継ぎ接ぎだらけの思い付き・間違ったインスピレーションで作業しているだけ システムの九龍城砦を築いてるようなもの
毎月最終行に「最終行」って手入力することが自動化の助けに成ると思うならそうしてみりゃいい
その手間の時間で印刷終わってる 何月がいちばん上の月か知らんが、年度途中の月、7月とか8月でもそれで動作するシステム組めるのか?
ボタンを12ヶ並べるつもり? 年度途中の月を印刷するためにひとつのボタンで解決させるには、もっと苦労を重ねるけど?
プログラムを書くためにExcel使ってるんじゃ無い 楽するために使ってんだ  

852 名前:デフォルトの名無しさん (オッペケ Src7-a63L) mailto:sage [2023/01/22(日) 17:06:34.14 ID:zZKA7THFr.net]
>>836
すんません
入れ違いで書いてしまいました

853 名前:デフォルトの名無しさん (オッペケ Src7-a63L) mailto:sage [2023/01/22(日) 17:08:34.65 ID:zZKA7THFr.net]
>>838
仕方が無いじゃん
自分で作ったシステムじゃないんだし
前任者が全て手動で半日掛かった仕事を5分で出来るようになっただけでもマシになったとは思う

854 名前:デフォルトの名無しさん (JP 0Hc7-j5s0) mailto:sage [2023/01/22(日) 17:10:50.88 ID:DNm1kf3fH.net]
>>839
いえいえ、こちらこそ要領が悪くてすみません
findでキーワードを検索して、該当セルを取得したら
そのセルが何行目何列目なのかを取得できますので
それを>>821の範囲に利用してみたらいけるかもですね

855 名前:デフォルトの名無しさん (ワッチョイ 43ad-a63L) mailto:sage [2023/01/22(日) 17:11:53.93 ID:PpuiymMq0.net]
>>838
月に一回だけ
ENDと入れるだけで
一ヶ月にかなりの時間を節約出切るのが分からない??

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

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

ほんとお前は性格悪いね

856 名前:デフォルトの名無しさん (ワッチョイ 43ad-a63L) mailto:sage [2023/01/22(日) 17:13:22.05 ID:PpuiymMq0.net]
>>841
キーワードを
ピロリちゃんとか
絶対に使わないであろう言葉を使えば良いかもですね

857 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 17:26:29.02 ID:zZKA7THFr.net]
縦向きえんど
横向きえんど

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

そうすりゃ毎月何も設定しなくても良くなりますね

858 名前:デフォルトの名無しさん [2023/01/22(日) 18:32:47.51 ID:Km84h4+z0.net]
>>844
そんなことより「ハゲでも分かるExcel VBA入門」という本を読めばいい。
分かりやすくてすぐ上達。

859 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 18:34:23.97 ID:5nd4WcY/0.net]
>>835
入力チェックはまた別の話
帳票毎にデータが違う方が怖いわ

860 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 18:35:54.62 ID:zZKA7THFr.net]
>>845
ワタシサバサバしてるので



861 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 18:36:29.31 ID:zZKA7THFr.net]
>>846
別の話じゃないよ

862 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 18:51:11.61 ID:vQS42HbD0.net]
>>817
レスサンクスです。
ということはYukkuriが100人いたら、
Dim Yukkuri?? As New Dictionaryを100行要るてことになるてこと?
timeline.Add Yukkuriのところで、timelineが使ってるメモリが追加でアロケートされ、
そこに連想配列が追加されるていう動きにならんのかね?
それか連想配列の実体をコピーできるとか。

863 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 18:52:29.42 ID:zZKA7THFr.net]
ワタシフサフサしてるので

864 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 18:56:56.52 ID:pQuel4xur.net]
>>846
ところで会社で嫌われてない?
その方が心配だわ

865 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 19:04:19.40 ID:uL/qufmv0.net]
日曜日に仕事?家に持ち帰りならブラック企業だな

866 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 19:13:06.03 ID:5nd4WcY/0.net]
>>848
別の話だろ
Excelと販管ソフトに個々に入力してるから安心とか言うならそれは単に二重入力してミスを見つけてるだけの話

>>851
まあこんなことを言い出すやつなんだろうけどw

867 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 19:20:26.34 ID:5nd4WcY/0.net]
>>849
だから何をやりたいのかいまいちよくわからんけど100個コピー作りたいならループで回せばいいだけ
新規のDictionaryはループ中で確保する
timeline.Add Yukkuri
Dim N As Long
Dim Yukkuri1 As Dictionary
Dim Key As Variant
For N = 1 To 100
Set Yukkuri1 = New Dictionary
For Each Key In Yukkuri.Keys
Yukkuri1.Add Key, Yukkuri(Key)
Next
timeline.Add Yukkuri1
Next

868 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 19:55:07.24 ID:pQuel4xur.net]
>>853
2つにそれぞれ意味があるから良いだろ
ソフトは客先に納品書や請求書をプリントしたり、EXCELは社内の全ての管理をしやすいように情報付与、そしてその2つが在る事でどちらのかの入力ミスを防げる
この仕組みで会社が儲かってるんだからケチ付けられんわ俺も

869 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 20:04:58.23 ID:xRK/d49A0.net]
>>814は恐らく連想配列が欲しいわけではなく、
javascriptやpowershellにあるような動的なプロパティが欲しいんだろう
VBAではそういう便利なものはないので基本ノードデータにジャグ配列を使って
ノードの先頭にプロパティ名に相当するタグを付けていった方が記述量的にも混乱が少ないと思われる

870 名前:デフォルトの名無しさん mailto:sage [2023/01/22(日) 20:21:20.32 ID:xRK/d49A0.net]
>>814の意図を汲んだデータをジャグ配列のノードで表記すると恐らく以下の様になる
dim timeline_root
timeline_root = array("timeline" _
,array("Yukkuri", array("Name", "霊夢"), array("serif", "霊夢です")) _
,array("Yukkuri", array("Name", "魔理沙"), array("serif", "魔理沙だぜ")) _
)
配列の要素0に必ずタグ名が入るようにすれば、HTMLのDOMツリーのように一環した探索ロジックが組める



871 名前:デフォルトの名無しさん (ワッチョイ bf3d-Sc6R) mailto:sage [2023/01/22(日) 23:17:51.08 ID:vQS42HbD0.net]
>>857
やろうとしてることは、ゆっくりムービーメーカー4の定義ファイルをVBAで編集すること。
ゆっくりムービーメーカー4の定義ファイルはJSONになってて、
VBAではJSONが使えないから、誰かが組んだVBA-JSONを使うと
JSONがVBAのコレクションやディクショナリー(連想配列)で作られたデータになる。
そこなかで、セリフが定義されてるを連想配列を複製してセリフ書き換えてくてことをやってるんだけど、
VBAのSETて参照するだけで、その参照したものを上位の配列にaddしても、
参照先情報みたいなものがaddされるだけで、別メモリーの情報がaddされるわけじゃない。
ただ、試行錯誤していたら
一旦同じ連想配列をaddしたものを作って、
それをjsonにして、またそのjsonを連想配列に戻してやれば、
別メモリが割り当てられた連想配列が出来上がった。
そのあとは個別に要素を書き換えられる。
javascriptとかは
.配列.push({...Yukkuri[0]})
とかやれば行けたんだが、VBAは無理なのか。

872 名前:デフォルトの名無しさん [2023/01/23(月) 00:40:24.32 ID:g2a0jdgy0.net]
こんどはjavaかw
できるならそっちでやれよ

873 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 02:01:54.23 ID:8zQTqYpQ0.net]
>>858
処理対象がjsonなら最初からそう書けばいいのに
いくつか手段はあるけどVBAでやろうとすると結局面倒だし特に理由が無いなら他を検討してみては
VBA-JSONの使い方の話なら俺は知らん

874 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 05:38:36.83 ID:yam+YnrUa.net]
>Excelと販管ソフトに、個々に入力してるから安心
もし、この2つが異なった値なら、システムが破綻しているw

オリジナルは1つのみ!
そして、バックアップ用のコピーを持つべき!

875 名前:861 mailto:sage [2023/01/23(月) 05:45:42.29 ID:yam+YnrUa.net]
例えば、銀行のシステムでも、2つのオリジナルを持たない。
3人が同時入力して、多数決でオリジナルを決める

サーバーでもそう。偶数個のノードにしない。
1:1, 2:2 などの分断が起きて、どちらがオリジナルか判断できなくなる

必ず、奇数個で判断して、オリジナルを決める。
そして、オリジナルのバックアップ用のコピーを持つ

そうしないと、システムが破綻する

876 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 05:47:16.87 ID:7g54Dlndr.net]
>>861
知らんがな
システムの良い悪いの判定なんてお前らに求めて無い事を察しなさい

俺以外の社員含めて理不尽な事をやってるなと思いながら仕事をしてるんだから

70歳の引退予定の上司に言ってくれ

そいつがいなくなればスッキリさせる

877 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 05:53:04.08 ID:7g54Dlndr.net]
>>862
例えば3人で販管ソフトに入力したとして
その販管ソフトの仕様により、会社の必要とする情報を持てない場合はどうするんですか?
そもそも一人しか人的資源が無い場合はどうするんですか?

878 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 06:43:46.30 ID:iLyXDG2rH.net]
>>872さんはキーワードで所望の範囲指定はできたのでしょうか?

879 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 06:47:14.18 ID:7g54Dlndr.net]
>>872
答えな

880 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 07:03:42.58 ID:7g54Dlndr.net]
>>865

変数を定義して範囲の右下のキーワードを拾って

ActiveSheet.PageSetup.PrintArea =

のところにその定義した変数を入れてやるという



881 名前:理屈で合ってますよね?

後はフサフサでも分かるEXCEL VBAの本が到着してから勉強します
[]
[ここ壊れてます]

882 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 07:11:24.85 ID:iLyXDG2rH.net]
よかったです、がんばってください!

883 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 08:50:43.95 ID:rT2ytU3d0.net]
>>858
> VBAのSETて参照するだけで、その参照したものを上位の配列にaddしても、
> 参照先情報みたいなものがaddされるだけで、別メモリーの情報がaddされるわけじゃない。
だから新規に作ってコピーしなよって書いたのに...
コードまで書いたのに無視するんならもうさじ投げるわ

884 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 09:10:22.34 ID:+DM8uE5N0.net]
>>869
新規に作るていっても、複雑な連想配列の塊をどうやって作る?
サンプルはたかだなNameとserifしかキーがないけど、
キーがいっぱいある構造のデーターをコード内でコピーするロジックを書くのは無理だと考える。
しかもその構造が動的だったらお手上げ。

885 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 09:18:38.98 ID:0EjNvA6Wd.net]
質問スレに回答してくる人は善意でやってるだけで最終的に自分で解決できないならあきらめろって話

886 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 09:32:51.14 ID:QZVEgBP9a.net]
>>870
> キーがいっぱいある構造のデーターをコード内でコピーするロジックを書くのは無理だと考える。
> しかもその構造が動的だったらお手上げ。
お前にはお手上げなだけだろw
>>854 に "Name" とか "serif" なんて書いてない、キーを動的に取得してコピーしてることすら読み取れないレベルなら諦めたほうがいいと思うよ

887 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 09:42:01.99 ID:q/YAUd9Kd.net]
マクロでやりたいなら行数が最大になるパターンで書式作っておいて、そこにデータ入力、不要な行の削除でそのまま印刷すればよくね?

888 名前:デフォルトの名無しさん (ワッチョイ bf3d-Sc6R) mailto:sage [2023/01/23(月) 09:55:52.06 ID:+DM8uE5N0.net]
>>872
すまんできたわ。
ありがとう。
Set Yukkuri1 = New Dictionary
を書く位置を間違えてた

889 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 13:24:02.41 ID:2y89VdvQ0.net]
またVBAが壊れた。
プロシージャの中でオブジェクト変数に割り当てる
ワークシート名やクエリー・テーブル名を
日本語にしているのはマズい?

890 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 15:15:51.75 ID:cuqAJLzI0.net]
インターネットが壊れた



891 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 17:40:15.92 ID:zqGzpVPE0.net]
vbaが壊れるという表現が分からない
プログラムは組んだようにしか動かない

892 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 18:35:46.07 ID:2y89VdvQ0.net]
先週までは問題なく動いていたブックを開くと、
すぐExcelが落ちて回復が入ってしまい、
回復ブックを開くと、プロシージャがモジュールごと丸々なくなっていた。

ワークシートのクエリーやテーブル、計算式やグラフは壊れていなさそうで、
新たにモジュールを作り直して
バックアップを取っていたプロシージャの記述をそのまま貼り付けたら、
一応、VBAも動くようになった。

過去には新たなモジュールすら作れなくなったことも。

893 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 19:12:29.48 ID:g2a0jdgy0.net]
自力で解決した自慢ですね、わかります

894 名前:デフォルトの名無しさん (ワッチョイ 53da-Jpma) mailto:sage [2023/01/23(月) 19:45:05.26 ID:GmkrhCzJ0.net]
過去に学んでこの際だからぜんぶ変えてしまおう またいつアプデ地獄に巻き込まれるか知れたもんじゃ無いし
https://qiita.com/Q11Q/items/7a9d4c89726cfaa7abd6

895 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 20:16:53.47 ID:iLyXDG2rH.net]
「VBAが消えてしまった!マクロが壊れて動かない!」
ってな感じで検索してみたら?

896 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 20:31:12.87 ID:XEd9VR/30.net]
ACCESSで、NLSの問題でカナ含むVBAモジュールが開けなくなるってのはあったな

897 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 21:06:30.67 ID:2y89VdvQ0.net]
>>881
ああ、そういえばIMAGE関数が家庭向けサブスクにも配布されたからと、
日曜日にExcelをバージョン2301に更新したんだった・・・

898 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 21:23:58.29 ID:7qHnsy280.net]
確認したけど2212が最新で更新できなかった

899 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 21:28:06.31 ID:c8LJJic2H.net]
NAME?

900 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 21:37:36.60 ID:2y89VdvQ0.net]
これが原因かどうかはまだ分からないけど。
https://i.imgur.com/49fEgC7.png

Office Insiderには参加していない。



901 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 21:54:37.35 ID:c8LJJic2H.net]
>>886
10年ぐらい前、変数を日本語名にしてると一切動かなくなるってバグがあったな
確かACCESSだった
変数を日本語名にしても、あまりいい事はないと思う

>>878
あと、この方法はあまり良くない
一度壊れたブックは、内部的にゴミデータが残っている可能性がある
使いまわすと、そことバッティングする可能性がある
新規ファイルを作り、シートを一つずつコピー、vbaもテキスト単位でコピー、
といった感じで作り直した方が良い
めんどくさいけど、やっておいた方がいいよとは言っておく

902 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 21:59:43.45 ID:2y89VdvQ0.net]
>>887
> といった感じで作り直した方が良い

やっぱり・・・orz






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<313KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef