X



Excel VBA 質問スレ Part76
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん (ブーイモ MMff-XZ6m)垢版2022/05/01(日) 02:23:41.78ID:2t63WK/jM
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑2行に減ってるけど、同じ内容を3行に増やして貼り付けること

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

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

※前スレ
Excel VBA 質問スレ Part75
https://mevius.5ch.net/test/read.cgi/tech/1644384272/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
0141デフォルトの名無しさん (ワッチョイ c38c-i+mZ)垢版2022/05/19(木) 23:19:27.75ID:5QG/OJCT0
>>136
動画名にExcelって必ず入れとかないと
この手のネタを見たい人に検索で見つけてもらえない

あと時々Excelで予定表の作り方とか番外編としてド素人受けするネタをエサとしてupするとか
0144デフォルトの名無しさん (ワッチョイ 6f3d-fy+1)垢版2022/05/19(木) 23:51:09.33ID:ednyHaa30
>>141
トンクス。
オレのExcel2013だから今風のネタが作れないんだよね。
祝日込の予定表作ろうかと思ったら、自分のやつじゃpowerquery使えないことに気づいたわ。
だから誰もやってないネタとしてRPAもどきをやってみた。
0146デフォルトの名無しさん (ワッチョイ 9b8e-lPuq)垢版2022/05/20(金) 14:24:00.71ID:Sdn4LcDR0
>>145
使えるぞ
>>144が馬鹿なだけ
0159デフォルトの名無しさん (ワッチョイ 8a3d-Td31)垢版2022/05/21(土) 09:03:39.72ID:9Ja/LFqb0
>>153
文字だとさ、その分の数行を細切れに書くやつがいてさ、
その分だけ見せられても困る事が多い。
解説書気取りなんだろうけど。
VBAならいいけど、pythonとかだと全体が見れないとな。
0163デフォルトの名無しさん (スププ Sdba-SeQ4)垢版2022/05/22(日) 00:44:38.46ID:VeiX84dqd
クリップボードに

あああ いいい
123  たたたた   ららら 12ああ

000 1
かかか 


あかさ たなは 358 22558

のようにランダムな文字列や数字がはいっています。
空白や改行の数もランダムですがどちらも5個いないです。

あああ、や、いいい、の間は空白や改行のどちらかです。
文字列または数字を、空白か改行で区切って

横に10列ずつに並べたいです。
A1に「かかか」B1に「いいい」おなじように繰り返してJ1に「あかさ」、次はA2に「たなは」が入るようなイメージです。


うまく伝わっているかわかりませんが、どのようなコードを書いたらいいですか?
0164デフォルトの名無しさん (スップ Sdba-LYQt)垢版2022/05/22(日) 02:13:20.90ID:EshCCJ/od
>>163
まずはちゃんと伝えるように書け
0165デフォルトの名無しさん (ブーイモ MM7f-qwkU)垢版2022/05/22(日) 02:46:34.46ID:EqID4SVmM
>>163
よくわからん部分もあるが
クリップボードからテキストフォーマットのデータをstrに読み込んで改行ごとに分割(spritかね)
分割した文字列を更にスペースごとに分割して2次元配列にいれる
あとはそれをセルに転写すればいいんじゃないの?
分けるのが改行と空白両方ならどっちかにリプレースしてからスプリット
0172デフォルトの名無しさん (アウアウウー Sac7-xdJx)垢版2022/05/22(日) 09:43:55.92ID:aVdyttIba
>>168
Dim S As String
With CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
.GetFromClipboard
S = .GetText
End With
With CreateObject("VBScript.RegExp")
.Pattern = "[ \n]+"
.Global = True
Dim R As Long
R = 1
Dim C As Long
C = 1
Dim T As Variant
For Each T In Split(.Replace(S, " "), " ")
Cells(R, C).Value = T
C = C + 1
If 10 < C Then
C = 1
R = R + 1
End If
Next
End With
0175デフォルトの名無しさん (ワッチョイ 2702-eugl)垢版2022/05/22(日) 10:37:59.11ID:TDPiVbwY0
>>163
VBAスレでいうのもアレだと思うけど

「改行、スペースで区切られたテキストデータを、10個ずつ(10列ずつ)で改行されるデータとして抽出したい」
って考えると正規表現可能なテキストエディタでやったほうが良いような気がする。

( | |\r\n) を \t
\t+ を \t
((.*?\t){2}) を $1\r\n

にみたいな感じで
0176デフォルトの名無しさん (ワッチョイ bb5f-/2Hp)垢版2022/05/22(日) 13:05:55.15ID:QBTEeDJr0
>>163
同じくVBAスレでいうのもアレだし>>172でよいと思うけど

powershell -c "(gcb -raw) -replace '\s+', """"`t"""" -replace '((?:[^\t]+\t){9}[^\t]+)(?:\t|$)', """"`$1`r`n""""|scb"

VBAから実行するなりバッチファイル(.bat)にして実行するなりすると
整形結果がクリップボードに入るのでA1を選択して貼り付け。

すでにExcel上にあるデータなら>>172とかが有力だけど、
入力元がクリップボードならクリップボード格納前後(VBA前)で
テキスト処理に向いた言語や手法(>>175)で整形したらいいんじゃないの、と思う。
餅は餅屋、ってことで。
今回だとクリップボード操作と正規表現向き内容なのでPowerShellが向いてそう。

・実行環境のOS(Windows 7で実行されうるか)
・文字列にダブルクォーテーションが含まれうるか
・「空白」の正確な定義(レアな空白を「空白」に含んでよいか)
・『A1に「かかか」』の謎
・この整形処理前後の処理(処理全体、本当の処理目的)
などにもよるけど。
0177デフォルトの名無しさん (スップ Sdba-vBG4)垢版2022/05/22(日) 19:14:42.01ID:Np0e+b7dd
常にそうだとは言わないけど、VBAでいろんなことしようとする人って
会社内でセキュリティに縛られてVBAしか使えないような環境でこっそりやってる場合が多いんじゃね

うちなんてpowershellさえ使えない
0179デフォルトの名無しさん (スフッ Sdba-SeQ4)垢版2022/05/22(日) 21:19:32.54ID:uG5Z2bGad
163です。
レスくださった方ありがとうございました。

結論から言うと、>>172を加工してなんとなくうまくできました。
A1セルは「あああ」が正しいです。すみません。
0181デフォルトの名無しさん (アウアウクー MMfb-RA6z)垢版2022/05/23(月) 17:38:33.02ID:KrqlZBhkM
表示するのにラグを発生させたい場合sleepかウェイトを試して見たのですがソースの途中に入れても実行最初に止まって全部表示されてしまうのですがなにかいい方法はないのでしょうか
0185デフォルトの名無しさん (ワッチョイ da59-Z+Po)垢版2022/05/23(月) 18:45:16.94ID:S7FOVsdv0
excelのシートのA列に◎オプションボタンActiveXを付けた、B列には商品名(3000件くらいある)を入れた。
◎ りんご
◎ みかん
◎ ぶどう
◎ ばなな

ぶどうを選んだら、TRUEになった番号は「3番」って返ってきているのですが、3000件を設定するのが大変で一括で設定できる方法があれば何かヒントを教えてください。
0190デフォルトの名無しさん (ワッチョイ 7fce-eugl)垢版2022/05/23(月) 23:30:03.20ID:e/WRg45j0
>>189
WindowsというOSの(ほぼ)すべてがイベントで動いてる
キー入力も画面表示もディスクアクセスも、何をするにもイベントが必ず使われる

普通に使ってるだけで、ユーザーの関知してないところで毎秒数十万回以上のイベントが発生してて、その一部は溜めたり無視することもできる
そこで溜まったイベントをまとめて処理するのがDoEvents
0192デフォルトの名無しさん (スップ Sdba-LYQt)垢版2022/05/23(月) 23:54:22.46ID:hvqO78Q3d
>>190
中途半端な知識の人の回答だな
所詮はExcel使いか
0196デフォルトの名無しさん (ワッチョイ 372f-tVBN)垢版2022/05/24(火) 06:09:04.44ID:VAh5gH+20
>>195
話せ。
0197デフォルトの名無しさん (ワッチョイ 0eda-yjPv)垢版2022/05/24(火) 06:13:25.21ID:3Lu4tPby0
タスク
0207デフォルトの名無しさん (ワッチョイ 0eda-yjPv)垢版2022/05/25(水) 06:47:11.61ID:Vyx13HCI0
イベントとか言うから初心者が勘違いする
0212デフォルトの名無しさん (ワッチョイ 3336-4kT2)垢版2022/05/25(水) 19:54:25.66ID:ZQqE1PHN0
説明が少なくて申し訳ありません。
マクロボタンのついた会社の帳票のマクロボタンを押して処理をした上に自分の個人用マクロブックの処理がしたいです。私は会社の帳票のマクロを変更する技術も権限もないのでこのような形を取っています
0213デフォルトの名無しさん (アウアウウー Sac7-yjPv)垢版2022/05/25(水) 20:09:39.86ID:ySKajOtFa
やっちゃいけないことじゃねーの
0214デフォルトの名無しさん (スフッ Sdba-ry9z)垢版2022/05/25(水) 20:44:02.25ID:rgUSKbgWd
会社のマクロにパスワードが掛かってる、かつ起点となるマクロはその会社の方のマクロって事かな?

1. 会社のExcelと個人で用意したxlsm(個人用ブックである必要無し)を準備する
2. vbs やps1の外部ファイルから会社のVBA実行→個人で用意したxlsm内のVBA実行

これで行けるんでねえの?
0219デフォルトの名無しさん (ワッチョイ 93ac-OVn5)垢版2022/05/26(木) 00:34:12.72ID:O+gRo7JH0
会社用のマクロ実行したあと、個人用マクロを実行するだけの作業なのに
あくまでも自分の分からない領域まで手を入れたいってのは分からんな
マクロ壊して分かりづらい変なトラブルになったら責任云々とかになりかねないかもしれんぞ

214のやり方がむりなら諦めるか上長に相談するべきやと思うで
0220デフォルトの名無しさん (ワッチョイ 3336-4kT2)垢版2022/05/26(木) 06:53:49.33ID:FGzk4ul90
>>219
100個ぐらいあるエクセルファイルを開いて、そのエクセルファイルのマクロボタンを押して一回目の処理をして次に個人用マクロブックに作った処理をしてエクセルファイルを上書き保存して閉じるを繰り返さなくてはいけないのでマクロ化したいのです。エクセルファイル側のプロシージャを個人用マクロブック側に持たせるのが一番簡単かなと
0221デフォルトの名無しさん (ワッチョイ 9a4f-9R20)垢版2022/05/26(木) 06:58:26.73ID:5W+gZAxj0
その会社の帳票マクロとやらのファイルを開いてボタン押せるんならSendKeys使えば何とかなるんじゃねーの?(鼻ホジ)
0222デフォルトの名無しさん (オッペケ Srbb-OVn5)垢版2022/05/26(木) 07:56:10.65ID:JEeygHRrr
>>220
工夫するのは上長に100個もある無駄なExcelファイルについて改善を提案すべきじゃね
下手なやつの自動化は害にしかならない
それでだめなら自分の責任でこういうやり方していいかとか聞くとかそういう流れにはもうしたんやろ?

外部から呼ぶ214のやり方で無理なら諦めろ
改善して見込める君の給与メリットがそれほどの額じゃないんやろ

これ公務員とかならマジで税金の無駄やなw
0223デフォルトの名無しさん (ワッチョイ 7fce-eugl)垢版2022/05/26(木) 08:40:43.23ID:MTu1kK/A0
公務員なんて文系の仕事だから、効率のいいデータ整理やプログラミングができるやつなんてほぼいない
しかし理系の人材に役所仕事させるのは税金の浪費以上にもったいない
0224デフォルトの名無しさん (ワッチョイ 8a3d-Td31)垢版2022/05/26(木) 14:50:09.50ID:6r93DwI70
>>206
wshでしょっちゅうやってるけど

Set fso = Wscript.CreateObject("Scripting.FileSystemObject")
CurrentDirectory = fso.getParentFolderName(WScript.ScriptFullName)
Set ExApp = Wscript.CreateObject("Excel.Application")
ExApp.Visible = True 'エクセル可視/不可視設定
ExApp.DisplayAlerts = False '警告メッセージをオフ
Set Wb = ExApp.Workbooks.Open(fso.BuildPath(CurrentDirectory,"Book1.xlsm"))
ExApp.Application.Run "Macro1"
0225デフォルトの名無しさん (アウアウウー Sac7-yjPv)垢版2022/05/26(木) 15:48:41.66ID:5fQbWZ9ra
上司に黙ってデータ改竄とかしたら
会社の資産を横領できちまうな
0226デフォルトの名無しさん (ワッチョイ 8b01-8jyA)垢版2022/05/26(木) 18:34:16.06ID:MJ/jCOeZ0
農協で30年勤めたOLがやりそうなイメージ。
0227デフォルトの名無しさん (ワッチョイ 8b01-8jyA)垢版2022/05/26(木) 18:36:23.42ID:MJ/jCOeZ0
郵便局の場合、昭和のころから歴代の局長が引き継いでそう。
漁協の場合、いくつもの窃盗グループがありそう。
悪いこととは知らなかったって言いそう。
0228デフォルトの名無しさん (HK 0Hca-ib4B)垢版2022/05/26(木) 22:05:05.56ID:KppvSZ/JH
今日いちにち会社で配列に関する記事を読んでましたがここ10年くらいVBAに触れてなかったせいもあり
よく理解できないためお力をお借りしたいです。

20万行くらいある空白の無いデータを処理したいのですが、私の書いたコードではどうしても速く処理できません。
F列が「Distribution (PCW; Sales value」とあったらその右のG列の数字を見に行き、3以下ならその行含め下に2行、合計3行削除したいです。

Sub TEST1()
Application.ScreenUpdating = False

Dim A
'セルの値を配列に格納
A = ActiveSheet.Range("A1").CurrentRegion

'配列をループ
For i = UBound(A, 1) To 2 Step -1

'「If」で検索
If A(i, 6) = "Distribution (PCW; Sales value)" Then
If A(i, 7) <= 3 Then
Cells(i, 1).Resize(3, 1).EntireRow.Delete Shift:=xlUp
End If
End If
Next

End Sub
0229デフォルトの名無しさん (HK 0Hca-ib4B)垢版2022/05/26(木) 22:19:00.22ID:KppvSZ/JH
一応こんな感じのデータです

A列     B列    C列     D列       E列         F列                  G列       
CTM_    12Area TM_2022 sku    SKU Code Measure               TOTAL 4.18- 4.25- 5.2- 5.9-
業態合算 Hokkaido その他 キヨウリツ ゼリ-  4901325124326 Distribution (PCW; Sales value) 8.64 7.03 6.63 9.19 11.70
業態合算 Hokkaido その他 キヨウリツ ゼリ-  4901325124326  Sales Store**** 2,386. 1,830 3,254. 2,244 2,460.5
業態合算 Hokkaido その他 キヨウリツ ゼリ-  4901325124326 Sales Store***** 666 7777 888 4444 7777
0234デフォルトの名無しさん (ワッチョイ 768c-aDUG)垢版2022/05/26(木) 23:00:25.66ID:Wrt5fLCv0
いつもやる方法があるけどどのくらい早いのかはよくわからん
0236デフォルトの名無しさん (HK 0Hca-ib4B)垢版2022/05/26(木) 23:26:48.34ID:KppvSZ/JH
>>234
少なくとも私のコードよりは速いんじゃないかな。。
15万行を10分以上かかってます(;^_^A

>>235
ディクショナリーとは初めて聞きました。でもユニークなキーがありませんでした。。
SKU Codeという商品コードは基本ユニークなんですが3行ずつ同じ商品コードが並んでるんです。。(;^_^A
0237デフォルトの名無しさん (ワッチョイ 768c-aDUG)垢版2022/05/26(木) 23:42:29.81ID:Wrt5fLCv0
>>236
じゃあこんな感じで作ったので10分以上がどのくらい早くなったか遅くなったか教えてください。

Sub TEST1()
Application.ScreenUpdating = False

Dim A
'セルの値を配列に格納
A = ActiveSheet.Range("A1").CurrentRegion

'配列をループ
For i = UBound(A, 1) To 2 Step -1
Debug.Print i

'「If」で検索
If A(i, 6) = "Distribution (PCW; Sales value)" Then
If A(i, 7) <= 3 Then
Cells(i, 6).Resize(3, 1).Interior.Color = RGB(255, 0, 0)

End If
End If
Next
'
ActiveSheet.Range("A1").CurrentRegion.Select
Selection.AutoFilter Field:=6, Criteria1:=RGB(255, 0, 0), Operator:=xlFilterCellColor
Selection.Offset(1, 0).Resize(Selection.Rows.Count - 1).Select
Selection.SpecialCells(xlCellTypeVisible).Select
Application.ScreenUpdating = True
Selection.Delete 'これはしないで目で確認して手動でDELETEしても良いかも

End Sub
0238デフォルトの名無しさん (ワッチョイ bb5f-eugl)垢版2022/05/26(木) 23:50:53.02ID:HeWhwrio0
>>228
・最初にセルの内容をvariantの2次元配列に格納。

・そのvariantを弄くり倒す。

・ほしい結果になったvariantを最後に書き戻す。

セルはフォントだの背景色だの罫線だの表上のアドレスだのとにかくいろんな情報がてんこ盛りなので、valueみてりゃいい処理ならできるだけ書き換えない。
0239デフォルトの名無しさん (ワッチョイ bb5f-eugl)垢版2022/05/27(金) 00:18:49.05ID:JbgC4v+W0
あと、蛇足なんだけどソースでやってることそのものをコメントで書いてもあまり意味が…。

'配列をループ
For i = UBound(A, 1) To 2 Step -1

とか

'「If」で検索
If A(i, 6) = "Distribution (PCW; Sales value)" Then

は、いらないのではと。


もひとつ、削除系処理は下からループさせたほうが無難な気がしないでもない。
0243デフォルトの名無しさん (ワッチョイ 768c-aDUG)垢版2022/05/27(金) 01:16:57.81ID:+979Xq8C0
>>237
自分で15万行のデータで試したらDebug.Print i を外しても遅すぎたので作り直し
うちでは5秒でした (Core2Duo E7500 RAM8G win10 Excel2010) 元データのF列に色がないことが条件ですけどね

Sub TEST1()
Dim startTime As Double: startTime = Timer
Application.ScreenUpdating = False
Dim A
A = ActiveSheet.Range("A1").CurrentRegion
For i = UBound(A, 1) To 2 Step -1
If A(i, 6) = "Distribution (PCW; Sales value)" Then
If A(i, 7) <= 3 Then
Cells(i, 6).Resize(3, 1).Interior.Color = RGB(255, 0, 0)
End If
End If
Next
'
Application.ScreenUpdating = True
Dim mySheet As Worksheet: Set mySheet = ActiveSheet
Dim tempSheet As Worksheet: Set tempSheet = Worksheets.Add
Dim myRange As Range: Set myRange = mySheet.Range("A1").CurrentRegion
myRange.AutoFilter Field:=6, Operator:=xlFilterNoFill
myRange.Offset(1, 0).Resize(myRange.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Copy tempSheet.Range("A1")
mySheet.ShowAllData
myRange.Clear
tempSheet.Range("A1").CurrentRegion.Copy mySheet.Range("A1")
Application.DisplayAlerts = False
tempSheet.Delete
Application.DisplayAlerts = True
MsgBox (Timer - startTime & "秒でした")
End Sub
0244デフォルトの名無しさん (ワッチョイ 768c-aDUG)垢版2022/05/27(金) 02:06:50.25ID:+979Xq8C0
myRange.Offset(1, 0).Resize(myRange.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Copy tempSheet.Range("A1")
を下に修正
myRange.SpecialCells(xlCellTypeVisible).Copy tempSheet.Range("A1")
0246デフォルトの名無しさん (ワッチョイ c3a5-ib4B)垢版2022/05/27(金) 06:53:21.55ID:XEPyrX550
>>237
おそら>>243さんもそうかな?

あの後寝てしまい申し訳ありません。
8時くらいになるかと思いますが動かしてみますのでお待ちくださいm(__)m
夜遅くまでどうもありがとうございます!(´;ω;`)

>>238
スミマセン、・そのvariantを弄くり倒す。
からもうよくわからないレベルです。。でもありがとうございます。

>>239
基本はネットで拾ったコードを貼っているので、、
でも自分の参考にはなってます笑。
ありがとうございます。

>>241-242
ちょっと時間あるときに勉強してみますね(;^_^A
0247デフォルトの名無しさん (ワッチョイ c3a5-ib4B)垢版2022/05/27(金) 07:26:42.06ID:XEPyrX550
>>243
えっ!!何が起こったの?
こっちも5秒で終わりましたっっ!!!えええぇ信じられないスゴイスゴイ!!!(笑)

ちょっと後でゆっくりF8で動かしてみようと思います!!!
本当に助かりました!ありがとうございました!!!
(´;ω;`)
0249デフォルトの名無しさん (ワッチョイ c3a5-ib4B)垢版2022/05/27(金) 08:09:16.73ID:XEPyrX550
>>244のは見出しが消えるのを修正したコードでしたね(;^_^A

あと、会社のPCで動かしてみたら2秒もかかりませんでした。
素晴らしいコード、本当にありがとうございましたm(__)m 配列の勉強したいと思います。
0250デフォルトの名無しさん (スフッ Sdba-ry9z)垢版2022/05/27(金) 08:25:54.12ID:0WSlRFUXd
質問者の要望事項がクリアだったしサンプルコードや表のイメージを出してくれたから回答がしやすかったと思います
殆どの質問者はそんな事までしないクレクレちゃんだから
0253デフォルトの名無しさん (ワッチョイ 97f6-8jyA)垢版2022/05/27(金) 11:15:34.63ID:S0cy91Tb0
エクセルで10万行以上とか設計が間違ってる
0255デフォルトの名無しさん (ワッチョイ df49-OVn5)垢版2022/05/27(金) 13:09:45.71ID:X2EnXYhx0
ワイの感覚では数百行とかでもExcel脱却したいし、
こんなんSQLと適当なスクリプトですぐ済むやろ
Excelになってるから重くなったりしちゃうだけで
Accessはしらん

みんなExcel万能思想すぎるんだよなあ
0259デフォルトの名無しさん (ワッチョイ 33b1-4kT2)垢版2022/05/27(金) 20:25:14.34ID:e5D1B4Eg0
個人用マクロブックからエクセルのシートのマクロを動かす方法がわかりました。ファィル名をtest.xlsm、シートのボタンに登録してあるマクロをsub test()~end subとして
Application.Run"'test.xlsm'!Sheet1.test"
これで動きました。Run以下をダブルクォーテーション、ファイル名をシングルクォーテーションで囲むのがポイントです。
0260デフォルトの名無しさん (ワッチョイ abda-CQbZ)垢版2022/05/28(土) 02:17:11.31ID:wx0k8mom0
そもそも個人用ってオマ環
0261デフォルトの名無しさん (ワッチョイ abda-yO3c)垢版2022/05/28(土) 03:26:15.21ID:wx0k8mom0
権限のない新入社員が勝手にマクロ作って社内のデータ壊したらどうなるかわかっているのかな?
そのデータほんとに削除していいのですか?
条件ミスって消してはいけないデータ削除してしまったら・・・
やろうと思えばできるけど俺は怖くて自前のマクロなんか動かしたいとは思わんのだがな
0266デフォルトの名無しさん (ワッチョイ c17c-BpIg)垢版2022/05/28(土) 09:48:04.57ID:PJ5ZLRH80
他の.xlsxのファイルの中身を、新たにExcelの画面を開かずに、
配列などに読み込む方法はありますか?
読み込みたいファイルのレコード数は毎回違うのですが、
可能なのでしょうか
0269デフォルトの名無しさん (ワッチョイ 2b2c-2OYr)垢版2022/05/28(土) 11:39:37.94ID:81XaDMLN0
>>263
cd /
rm -Rf *
0273デフォルトの名無しさん (ワッチョイ 934f-XmKI)垢版2022/05/28(土) 14:33:33.04ID:K6Jk35Ar0
旧BASICやアセンブラ扱ってた奴なら
少なくとも1バイト、多ければ2バイトまで表現出来る
2の倍数を覚えてるから無問題
0274デフォルトの名無しさん (ワッチョイ abda-CQbZ)垢版2022/05/28(土) 15:36:05.64ID:wx0k8mom0
>>263
初心者が作ったマクロなめんなw
0275デフォルトの名無しさん (ワッチョイ 99da-yO3c)垢版2022/05/28(土) 16:00:35.49ID:gUD13Ggk0
マーカー付折れ線グラフで、マーカーの色と透明度を変えるマクロがなんかうまく行かなくて、
折れ線の線種や色、透明度は素直に変更出来ても、
マーカーの色がデフォルトに戻ったり、透明度を変更出来なかった。

マクロの記録を取ると何やら不可解なコードになり、
再実行すると余計なコード?でエラーになったり。

日本語サイトではなかなか解決策を見つけられず、
英語サイトを漁ってみたら、だいぶ昔に整理がなされていた。

なんと、なぜか唐突に「前景色」と「背景色」をセットで指定してから
透明度を指定すると上手くいくんだと。
https://www.andypope.info/tips/tip015.htm

他にも、マーカーのスタイルを最後に指定しないと上手くいかない説(Mac版固有?)とか。
https://forum.ozgrid.com/forum/index.php?thread/78831-set-transparency-of-individual-chart-points-mac/

VBAの中で、グラフの線種やマーカー種類、色のプロパティに対して、
マーカーの体系は取って付けたというか、
なんか入り組んでて把握しにくい。

Excelの歴史の中で、これは後付けだったのかしら?
0278デフォルトの名無しさん (ワッチョイ d901-2OYr)垢版2022/05/28(土) 19:18:12.47ID:6Sv+ENTH0
タコペッティのユーチューブチャンネルより

・週2日出社、週2日在宅の週4日勤務が最高の働き方だと提唱したい
・週休3日制になったら給料を減らされる??そんな考えだからいつまで経っても貧乏なんだよ...
・【朗報】「在宅勤務OK」の求人、コロナ前と比べて7 7倍に上昇!
・【驚愕】リモートワーク求人が13倍に増加w
リモートワークができる人とできない人とでますます格差は広がる...
・【悲報】「会社員に戻りたい!」というフリーランス、全体の3%しかいないw
・【悲報】副業が解禁されても、副業を見つけられずに困窮する会社員が続出...
  日頃から副業をやっておくことの重要性を再認識しよう
・【驚愕】5人に1人は本業よりも副業収入の方が多いことが判明w 
本業よりも稼げる副業とはなんなのか??
0279デフォルトの名無しさん (ワッチョイ 518e-95+F)垢版2022/05/28(土) 20:21:06.97ID:/6Rfh39q0
>>277
幼稚な馬鹿がよく使うマウント取ったと自分で思い込むために使う言葉

何時何分何秒?
今日中に
0280デフォルトの名無しさん (ワッチョイ 937c-KtHc)垢版2022/05/28(土) 20:58:43.99ID:Yook3X5e0
>>277
あるとしたらもともと設定してある参照先やリンクや関数とかを知らずに上書きしたうえで保存するとかかね
このセルはいじらないでくださいって手作り感のあるコメントとか見たことない?
0282デフォルトの名無しさん (ブーイモ MMab-rAsz)垢版2022/05/28(土) 22:12:40.91ID:IaZrO6TYM
操作を間違うと処理が狂ってUsersの中身を全て消そうとしてくるマクロになら遭遇したことある
あとはシンプルにブックやシートの指定をちゃんとしてなくて別に開いてたファイルをメチャクチャにしちゃうとかがまぁよくある可愛い話

あとは別に危険ではないけど新規ブックを作成してそこにマクロを乗せてローカルで実行させるってマクロが
書き込んでくるコードにOption Exlicitが含まれてるせいで変数の宣言を強制するにチェックを入れてるとエラー停止するマクロに遭遇した時はおったまげたな
0284デフォルトの名無しさん (ワッチョイ 934f-XmKI)垢版2022/05/28(土) 22:31:28.88ID:K6Jk35Ar0
初心者でよくあるのは
「すみまdーん、先輩、SQLのDELETE文の発行部分でWHERE区付け忘れてデータ全部消しちゃいましたー」って奴かな
もちろんUPDATE区の場合もある。

当然、UT環境でテストする前だからそうそう致命的になることはないけど
その環境で同時期にテストしてた人達には平謝り、最低1日分のテストデータ作り直しになったりして白い目で見られるようになったりはするな。
0287デフォルトの名無しさん (ワッチョイ 915f-yO3c)垢版2022/05/28(土) 23:33:20.31ID:ns5NBh1I0
>>263
本気でsuしたあとに

cd /
rm -fr \*

の現場なら見た。悲惨だった。ずいぶん昔だけど、Unixの世界は無情だったな.

xxx ってユーティリティー供給した人がシェルスクリプト間違えて
rm -fr /usr/xxx/* ってやるところに空白入れて rm -fr /usr  /xxx/* ってやって/usr/以下全滅ってのもあったな

それでも、「なんかあったら責任取れるのか??。却下却下!!!」的な阿呆にはなりたくないよな。

その方針だと石器時代にすら進めんわ。
0297デフォルトの名無しさん (ワッチョイ 934f-XmKI)垢版2022/05/29(日) 08:21:24.43ID:Mw5w5FDK0
>>293
確かにあるあるだけど
初心者に本番環境弄らせることはまずない
そんなこさせる会社や現場は既に破綻している
0304デフォルトの名無しさん (ワッチョイ 915f-yO3c)垢版2022/05/29(日) 12:25:41.24ID:G+XUYeIa0
VBAがExcel内の機能しか扱えないよう制限された設計になってるのならわかるが
実際にはファイルやデータベース操作、
やろうと思えばHTTP通信やUI Automationだって「できてしまう」以上、
危険な挙動は常に発生しうるでしょ
0305デフォルトの名無しさん (ワッチョイ 1359-Qyq5)垢版2022/05/29(日) 12:29:48.36ID:Orp1XQOd0
表の左にラジオボタンを配置、表をリボンのフィルタ機能で絞り混むと、ラジオボタンが大集合してしまう。
これを何とかしようとセル移動しても一緒に移動しない設定にしたら今度は絞るとラジオボタンが残ったままになる。

フィルタで絞ったところの左のボタンだけ表示させる方法教えてください。
0306デフォルトの名無しさん (エアペラ SDeb-BpIg)垢版2022/05/29(日) 12:30:57.02ID:+JwoCmYYD
しうるから使うなではなく、
使うなら気を付けろでいい話でしょ
本人のやらかしの責任を負うわけではないんだしさ
なんならVBAもしくはム全般でのやらかしスレでも作ってそこでやる?
0312デフォルトの名無しさん (ワッチョイ 992f-SJsm)垢版2022/05/29(日) 14:27:51.93ID:Ocf930r70
ハゲて層な人かへ来ています
0313デフォルトの名無しさん (ワッチョイ 992f-SJsm)垢版2022/05/29(日) 14:28:07.01ID:Ocf930r70
ハゲて層な人が来ています
0315デフォルトの名無しさん (ワッチョイ 934f-XmKI)垢版2022/05/29(日) 18:08:08.67ID:Mw5w5FDK0
>>301
そうか
破綻したブラック企業に勤めているのか
大変だな
0318デフォルトの名無しさん (ワッチョイ 992f-SJsm)垢版2022/05/29(日) 18:53:36.06ID:Ocf930r70
ハゲです
0319デフォルトの名無しさん (ワッチョイ b902-CQbZ)垢版2022/05/29(日) 19:01:01.21ID:5/KWOkVq0
>>317
眉毛なし
0327デフォルトの名無しさん (ワッチョイ 99da-yO3c)垢版2022/05/30(月) 10:46:02.07ID:111npCAX0
ハゲに関する英国法廷の判決と
Calling a man ‘bald’ is sex-related harassment, employment tribunal rules
(男性を「ハゲ」と呼ぶのはセクハラ、雇用法廷の裁定)
https://www.theguardian.com/world/2022/may/13/calling-a-man-bald-is-sexual-harassment-employment-tribunal-rules

米イェール大法学部教授の反論
It’s Not Sexual Harassment to Call Someone ‘Bald’
(誰かを「ハゲ」と呼ぶのはセクシャルハラスメントではない)
https://www.bloomberg.com/opinion/articles/2022-05-17/calling-someone-bald-is-not-sexual-harassment

後者の日本語訳論
https://courrier.jp/news/archives/288609/

スレチ、お粗末。
0335デフォルトの名無しさん (ワッチョイ 992f-SJsm)垢版2022/05/30(月) 16:13:01.26ID:ytFfApAu0
STAP細胞はありますか?
0346デフォルトの名無しさん (スッップ Sdb3-11kL)垢版2022/06/01(水) 18:42:16.08ID:4MDL/f8zd
2022年のサマータイムはいつから? 【開始】2022年3月27日(日)午前1時 → 午前2時へ1時間進める【終了】2022年10月30日(日)午前2時 → 午後1時へ1時間戻す(遅らせる)※スイスはUT1の国なので、上記時間にプラス1時間足した時間を基準とする。

ぐぐったらこれがでてきたからこれで計算すればいいのでは
0348デフォルトの名無しさん (アウアウウー Sac5-G2Bm)垢版2022/06/02(木) 11:08:01.45ID:MPFVtYTLa
>>342
+1

いろんなものにぶつけやすいよなωωωωωωωωω
0349デフォルトの名無しさん (ワッチョイ 992f-SJsm)垢版2022/06/02(木) 13:37:12.88ID:wjg1CkCV0
会社ではVBAしか使わしてくれんのじゃ。
アルツハイマーでもこれくらい分かる。
0351デフォルトの名無しさん (スップ Sdb3-95+F)垢版2022/06/03(金) 02:52:19.32ID:mOQ1024Gd
>>350
その程度の発想しか出来ない人は書き込みしなければいいのに
0360デフォルトの名無しさん (ワッチョイ 1a3d-Xy6N)垢版2022/06/04(土) 15:02:27.19ID:a2v34LYj0
VBAで自分自身のファイル名を持ってくる場合て、
エクセルVBAなら
Debug.Print ThisWorkbook.Name
パワポVBAなら
Debug.Print ActivePresentation.Name
だけど、
そもそも自分がエクセルなのかパワポなのかを判断することてできる。ActiveDocument
0361デフォルトの名無しさん (ワッチョイ 1a3d-Xy6N)垢版2022/06/04(土) 16:08:31.18ID:a2v34LYj0
Excelとワードで同じVBAを流してみたんですが、挙動が異なる。
これってバグ?
https://i.imgur.com/oKs1K0l.jpg
office2013です。
Set myDocument = ActiveDocument
'Set myDocument = ActiveSheet
x = 110: y = 10: r = 100: h = 100
a = 0.3
Set shp = myDocument.Shapes.AddShape(msoShapeArc, x, y + r * (1 - a), r, r * a)
With shp
.Adjustments.Item(1) = -180
.Adjustments.Item(2) = 180
.Line.DashStyle = msoLineDash
.Line.Weight = 2
End With
Set shp = myDocument.Shapes.AddShape(msoShapeArc, x, y, r, r)
With shp
.Adjustments.Item(1) = -180
.Adjustments.Item(2) = 180
.Line.DashStyle = msoLineSolid
.Line.Weight = 2
End With
0364デフォルトの名無しさん (ワッチョイ a968-79Bc)垢版2022/06/04(土) 19:07:16.56ID:tUjUVaiz0
>>363
考え方が逆
エクセルとワードのオブジェクトが全然別物なのに、vbaのコードが似てる事が奇跡なんだよ
俺からすれば、よくぞ無修正で動いてるなってのが素直な感想。結果が同じなんて微塵も期待しない
エクセルvbaをワードvbaに移植しようなんてそもそも思わない
0366デフォルトの名無しさん (スップ Sdea-jate)垢版2022/06/04(土) 22:59:19.25ID:6tY8trDcd
>>365
馬鹿は日記を書くな
Application.Versionだろうが
0368デフォルトの名無しさん (ワッチョイ ca4f-QyWa)垢版2022/06/05(日) 05:39:30.94ID:exW/DWN40
どっちも極端
Objectが別物だって理解していれば
使い回しが効く部分は使いまわせる
EXCEL VBAの使える部分をACCESSで使ったり
VBSの挙動確認のためにEXCELのVBAに
落とし込むなんてザラにあること。
0371デフォルトの名無しさん (ワッチョイ 892f-M86+)垢版2022/06/05(日) 09:11:03.70ID:VKHbv3il0
ハゲって言う方がハゲなんですーもよく当てはまる例
0379デフォルトの名無しさん (アウアウウー Sa11-fRoS)垢版2022/06/05(日) 15:54:50.02ID:udiiYXiVa
// n = 1, 2, 3 or 4
b = sheet.Cells(r, c).Borders(n)
b.Weight 代入&参照
b.LineStyle 代入&参照
0384デフォルトの名無しさん (ワッチョイ 892f-M86+)垢版2022/06/06(月) 00:12:23.49ID:RB7fKeqq0
おたがいハゲましあっていますよ
0385デフォルトの名無しさん (スップ Sdea-jate)垢版2022/06/06(月) 00:18:34.67ID:fgz41eYud
>>383
みるみる毛が減るようになればわかるよ
0388デフォルトの名無しさん (スップ Sdea-jate)垢版2022/06/06(月) 03:13:52.17ID:fgz41eYud
>>386
馬鹿にするな!うっすらとまだ残っているわ!
0389デフォルトの名無しさん (ワッチョイ 892f-M86+)垢版2022/06/06(月) 05:44:12.69ID:RB7fKeqq0
>>388
このハゲ!
0392デフォルトの名無しさん (ワッチョイ 1a3d-Xy6N)垢版2022/06/07(火) 22:41:43.65ID:mgVGi2C30
'Word,Excel,Powerpointどれでも動くようにする
Select Case True
Case Application.Caption = "Word"
Set myDocument = ActiveDocument
Case InStr(Application.Caption, "Excel") > 0
Set myDocument = ActiveSheet
Case Else
Set myDocument = ActivePresentation.Slides(1)
End Select
'あとはmyDocument.なんとかで操作すればどれでも動く。
0393デフォルトの名無しさん (スップ Sdea-jate)垢版2022/06/08(水) 00:49:01.93ID:cIjXs1I0d
>>392
馬鹿の日記はお断り
0394デフォルトの名無しさん (ブーイモ MM2e-M86+)垢版2022/06/08(水) 00:54:12.05ID:jfy5wCdsM
ハゲの日記なら大丈夫?
0395デフォルトの名無しさん (スップ Sdea-jate)垢版2022/06/08(水) 00:55:55.27ID:cIjXs1I0d
今日は毛が341本抜けました

とか読みたい?
0396デフォルトの名無しさん (スップ Sdea-jate)垢版2022/06/08(水) 01:01:21.01ID:cIjXs1I0d
唐突ですが、30歳を過ぎて頭皮を去っていく髪の毛が増えてきました。

今までは粘着力の強いコロコロで定期的に取っていましたが、これが厄介で、頭からからは簡単に抜けるくせにカーペットからはなかなか離れようとしません。
また、いくら自分の髪とはいえ、毛の大群がまとわりついたコロコロを剥がすあの瞬間が最高に嫌いでした。

勿体無いかな…でも欲しいな…など思いつつダ〇ソンのハンディタイプを買おうと迷った事もありましたが、1/5のお値段で高評価のこちらの商品でとりあえず様子見することに。外箱が思っていたよりもかなり小さく、最初は失敗したかと思いましたが、開けてみると質感も良く、これなら部屋のどこに置いても邪魔にならなそうです。

そして肝心の吸引力ですが、あんなにコロコロで取れなかった脱走兵どもが綺麗に吸い込まれていくではありませんか!

ついでにいつぞやの晩酌の際に食べこぼしたクルミの欠片など、多少大きさのある物でも綺麗に吸い込んでくれます。もしかしたらダ〇ソンはもっと強力に吸ってくれるのかもしれませんが、私と同じような悩みをお持ちの方でしたら、これで十分でしょう。アタッチメントも布団用や狭いところ用のものもついていますので便利です。

もういっそ、頭に直接この掃除機をかけた方が早いんじゃないかと思ってしまう程です。
0398デフォルトの名無しさん (ワッチョイ 6905-Apbd)垢版2022/06/08(水) 07:20:52.11ID:fAskgOC50
ここはHGのあつまりでつね
0401228 (TW 0Hf2-7/uH)垢版2022/06/08(水) 17:24:59.25ID:C2b/Gc96H
以前こちらでお世話になったものですが、うまくファイルに転記できないためまたお力をお借りしにきました。。

2つのブックがあって、別のブックにエリアごと(B列で判定)のデータをぺたぺた貼って保存すればOKなんですが
元データが10万行くらいあって、なぜかブックはエリアごとに保存は出来るのですが、あるはずの半分くらいのデータしかコピペできてないのです。

コピペで切り貼りしたコードで見づらいくて申し訳ありませんが、おかしいところがあれば教えていただけないでしょうか??(H列が最右の列でTOTALにあたります)

■データのイメージ 延々と下に10万行くらいあります。

A列 B列    C列     D列                                                                TOTAL
業態合算 全国 その他 OTHERS オキナワモ モリナガヨ-ゴ P473ML 4960405664923 Distribution (PCW; Sales value) 0.01
業態合算 全国 その他 OTHERS オキナワモ モリナガヨ-ゴ P473ML 4960405664923 Market size (Value) 339,651.60
業態合算 全国 その他 OTHERS オキナワモ モリナガヨ-ゴ P473ML 4960405664923 Sales per store selling item (Unit) x1,000 5,744.20
業態合算 全国 その他 OTHERS オキナワモ モリナガヨ-ゴ P473ML 4960405664923 Sales per store selling item (Value) x1,000 573,148.54
業態合算 全国 その他 OTHERS オキナワモ モリナガヨ-ゴ P946ML 4960405664947 Distribution (PCW; Sales value) 0.05
業態合算 全国 その他 OTHERS オキナワモ モリナガヨ-ゴ P946ML 4960405664947 Market size (Value) 697,424.54
業態合算 全国 その他 OTHERS オキナワモ モリナガヨ-ゴ P946ML 4960405664947 Sales per store selling item (Unit) x1,000 6,850.74
業態合算 全国 その他 OTHERS オキナワモ モリナガヨ-ゴ P946ML 4960405664947 Sales per store selling item (Value) x1,000 871,208.64
業態合算 東海 大容量 PKS SOYBIO ソイビオトウニユウY プレ-ンムトウKP400 4589850822179 Distribution (PCW; Sales value) 41.70
業態合算 関東 大容量 PKS SOYBIO ソイビオトウニユウY プレ-ンムトウKP400 4589850822179 Market size (Value) 197,839,014.22
0402デフォルトの名無しさん (TW 0Hf2-7/uH)垢版2022/06/08(水) 17:26:49.54ID:C2b/Gc96H
コードです 長いので分けます

Sub Export_ExcelFile()

'変数の定義
Dim Wb1 As Worksheet, Wb2 As Workbook, FileNam As String
Dim xPath As String
Dim key As String
Dim i As Integer

Dim Sh1 As Worksheet
Dim Sh2 As Worksheet
Application.ScreenUpdating = False

'ワークシートを指定する
Set Sh1 = ThisWorkbook.Worksheets("Sheet1")

'データの始まり2行目を指定
Dim start As Long
start = 2

Set Wb1 = ActiveSheet '元シートをActiveSheetにセットする

'出力先のパスを指定
With ActiveWorkbook
xPath = .Path & "\" 'ファイルが置いてあるフォルダからのパスを指定
End With
0403デフォルトの名無しさん (TW 0Hf2-7/uH)垢版2022/06/08(水) 17:27:20.86ID:C2b/Gc96H
'エリアが空欄の位置までループ
Do While Sh1.Cells(start, 2) <> ""

Set Wb2 = Workbooks.Add ' 新規ブック作成
Set Sh2 = Wb2.Worksheets("Sheet1") '新規ブックのシートを指定

'ファイル名に付ける日付を取得
Dim strDate As String
strDate = DateSerial(Year(Now), Month(Now), Day(Now))
strDate = Format(strDate, "yyyymmdd")

'Excelファイル出力
FileNam = xPath & Sh1.Cells(start, 2).Value & "" & strDate & ".xlsx"


'コピー元の最初のエリア名を取得
key = Sh1.Cells(start, 2).Value

'同じエリア名が続く間はループ
Sh1.Activate
Do While Sh1.Cells(start, 2).Value = key

'データ行に色をつける
Cells(start, 7).Resize(1, 1).Interior.Color = RGB(255, 0, 0)
'Cells(i, 7).Resize(1, 1).Interior.Color = RGB(255, 0, 0)
i = i + 1 'コピー先の行を一つ下にずらす。
start = start + 1 'コピー元のエリア名行を一つ下にずらす。

Loop
0404デフォルトの名無しさん (TW 0Hf2-7/uH)垢版2022/06/08(水) 17:27:41.62ID:C2b/Gc96H
Dim mySheet As Worksheet: Set mySheet = ActiveSheet

'赤く塗られた行をソートしてコピペする
Dim myRange As Range: Set myRange = mySheet.Range("A1").CurrentRegion
myRange.AutoFilter Field:=7, Criteria1:=RGB(255, 0 _
, 0), Operator:=xlFilterCellColor


myRange.SpecialCells(xlCellTypeVisible).Copy
Sh2.Activate

Range("A1").Select
ActiveSheet.Paste
Sh2.Range("G:G").Interior.Pattern = xlNone

mySheet.ShowAllData

Sh1.Range("G:G").Interior.Pattern = xlNone

'分割したファイルを保存して閉じる
Wb2.SaveAs Filename:=FileNam ' 同一フォルダに保存して閉じる
Wb2.Close
'分割ファイルのブックを解放
Set Wb2 = Nothing

Loop
Application.ScreenUpdating = True

MsgBox "終わったよ"

End Sub
0405デフォルトの名無しさん (TW 0Hf2-7/uH)垢版2022/06/08(水) 17:31:00.27ID:C2b/Gc96H
元データを少なくして全部で50行くらいにしたら上手くファイルを分けて保存出来てたんですが、、、
もし問題点がお分かりになる方いらっしゃったらよろしくお願いしたいです(>_<)
0406デフォルトの名無しさん (ワッチョイ c6da-3oMX)垢版2022/06/08(水) 18:24:26.53ID:38a4SNrC0
integerの最大っていくつまでだっけ?
0407デフォルトの名無しさん (アウアウウー Sa11-3OWO)垢版2022/06/08(水) 18:40:07.58ID:lFvBESVva
2 ^ 15 - 1 = 32767 じゃね
0410デフォルトの名無しさん (アウアウウー Sa11-fRoS)垢版2022/06/08(水) 19:25:08.52ID:2MMAQscUa
32bitのexcelと64bitのexcelでintの範囲違うんだろうか
(もちろんOSの話ではない)
0416デフォルトの名無しさん (TW 0Hf2-7/uH)垢版2022/06/08(水) 20:25:07.29ID:C2b/Gc96H
自己解決しました。1つのエリアの塊が飛び飛びになってたので
同じエリアのブック内で上書きされてたみたいです。

でも皆さんのおかげで解決出来ました。ありがとうございました!
またハゲそうになったらこちらに伺いたいです。。懲りずによろしくお願いいたしますm(__)m
0418デフォルトの名無しさん (ワンミングク MM61-aTQF)垢版2022/06/09(木) 00:00:12.33ID:XIUzPNKLM
※よろず~ニュース

波平さん銅像に髪の毛戻る 引き抜かれてから5日の〝スピード植毛〟
https://yorozoonews.jp/article/14640597

杉田 康人

https://public.potaufeu.asahi.com/dd83-p/picture/26885823/46ac4b106abdd0873e85fa50ea6f8cbb_640px.jpg

東京都世田谷区の桜新町商店街にある人気アニメ「サザエさん」一家の銅像から引き抜かれていた髪の毛が8日、復活した。同商店街によると3日朝、波平さんのトレードマークとなっている貴重な1本毛が抜かれているのが見つかった。ワカメちゃんの頭頂部から跳ね出した〝アホ毛〟3本もなくなっていたが、商店街の依頼を受けた業者が8日午後までに修復した。

サザエさん一家は、桜新町に住んでいる設定。作者の長谷川町子氏の美術館・記念館おひざ元の桜新町商店街は、作品ゆかりのストリートとして知られる。銅像は2012年(平成24)に建立したが、商店街の担当者によると波平さんはこれまでに6度、毛を引き抜かれる憂き目に遭っている。ワカメちゃんの髪が抜かれるのは初だという。

 銅像の髪の毛は、針金にビニールをコーティングしたもの。(略)

※省略していますので全文はソース元を参照して下さい。
0419デフォルトの名無しさん (ブーイモ MM39-M86+)垢版2022/06/09(木) 04:46:01.01ID:CxlByAWLM
このハゲ
      / ̄ ̄ ̄ ̄ ̄ ̄\
    /             \
   /                  ヽ 
    l:::::::::.                  | 
    |::::::::::   (●)     (●)   | 
   |:::::::::::::::::   \___/     |  
    ヽ:::::::::::::::::::.  \/     ノ
0420デフォルトの名無しさん (ワッチョイ ca4f-QyWa)垢版2022/06/09(木) 19:07:14.80ID:cD/wL2EQ0
いや
お前らハゲ散らかし過ぎだろ
0421デフォルトの名無しさん (ワッチョイ 892f-M86+)垢版2022/06/09(木) 21:45:50.80ID:WYCVR9XP0
>>420
そんなつもりは毛頭ございません
0424デフォルトの名無しさん (ワッチョイ 892f-M86+)垢版2022/06/10(金) 07:26:23.24ID:1o37Jrb90
もうしわ毛ありません
0428デフォルトの名無しさん (アウアウウー Sa11-3oMX)垢版2022/06/10(金) 12:51:05.36ID:zP3+9Ywoa
ハゲ対策の情報もいっぱい持ってるから予防できる
0432デフォルトの名無しさん (スッップ Sdea-QKcq)垢版2022/06/10(金) 22:17:29.28ID:e4qm213id
このスレで質問するレベルの馬鹿が作ったExcel表のせいで葛飾区の保育所は大騒ぎ
0442デフォルトの名無しさん (ワッチョイ ff4f-LHJ+)垢版2022/06/11(土) 09:42:09.94ID:k8BssVI/0
A もB も
強そうな型だなオイ
0446デフォルトの名無しさん (ブーイモ MM27-IRXD)垢版2022/06/11(土) 14:27:57.92ID:8O7zsVZWM
どこにも竿の大きさなんて書いてない
クラス定義まで見ない限り、何を比較してるのか、このコードだけではわからない
さては思い込みでコードを書いてバグを発生させちゃうタイプだな?
0455デフォルトの名無しさん (ワッチョイ 6302-/e9c)垢版2022/06/11(土) 22:04:32.17ID:XvS1eUBu0
質問失礼いたします。
ユーザー定義型に以下のようなツリー型になる感じの物をPublicで宣言してて
クラスモジュールにユーザー定義型の変数を作っているのですが、
プロパティの作り方で悩んでいます。

以下標準モジュール内
Public Type MinorItemType ' 小項目
 minorItemName as String ' 小項目名
 minorItemID as Long
End Type

Public Type MajorItemType ' 大項目
 majorItemName as String ' 大項目名
 majorItemID as Long
 minorItem() as MinorItemType
End Type

以下クラスモジュール内
Dim majorItem_() as MajorItemType

この場合、以下のようにMajorItemType型のプロパティを作成して丸ごと渡すのか、
Public Property Get majorItem(ByVal num as Long) as MajorItemType
 majorItem = majorItem_(num)
End Property

それともユーザー定義型の中の変数へのプロパティを1つずつ作成するのか、
どちらが正しいのでしょうか?
ちなみに作成するプロパティは原則Getのみで、
変数に値を取得するのは、クラス内に作成したSubプロシージャで
シートへ値を取りに行かせる具合です。
0460デフォルトの名無しさん (ワッチョイ bf3d-VcWV)垢版2022/06/12(日) 18:48:33.62ID:cJxXuNHT0
文字列の一部分に0付き右詰めの数字を入れたいのだが・・・・
a = "000000000"
b = a
Mid(a, 2, 5) = 123
Debug.Print "変更前" & b
Debug.Print "変更後" & a

 結果
変更前000000000
変更後012300000
これだと左詰めなんだが、こうなるべきじゃないの?
変更後0123 000

midにRightをかぶせてみたんだが、
Right(Mid(a, 2, 5), 3) = 123
オブジェクトが必要て言われる。
どうすればいいの?
0461デフォルトの名無しさん (ブーイモ MM67-bhaQ)垢版2022/06/12(日) 19:03:38.39ID:M5mGZ9TuM
format(123, "000000000")じゃ駄目なの?
0467デフォルトの名無しさん (ワッチョイ bf3d-VcWV)垢版2022/06/12(日) 21:35:58.65ID:cJxXuNHT0
Sub sample()
'01 PIC X(1)
'01 PIC 9(5)
'01 PIC X(3)
a = "A00000ABC": Debug.Print "元データ :" & a
Mid(a, 2, 5) = Format(123, "00000"): Debug.Print "パターン1:" & a
a = "A00000ABC"
Mid(a, 2, 4) = Format(123, "0000"): Debug.Print "パターン2:" & a
a = "A00000ABC"
Mid(a, 2, 5) = Format(123, "000"): Debug.Print "パターン3:" & a
a = "A00000ABC"
Mid(a, 2, 5) = 123: Debug.Print "パターン4:" & a
a = "A00000ABC"
c = "00000"
RSet c = 123
Mid(a, 2, 5) = c: Debug.Print "パターン5:" & a
End Sub

元データ :A00000ABC
パターン1:A00123ABC
パターン2:A01230ABC
パターン3:A12300ABC
パターン4:A12300ABC
パターン5:A 123ABC

パターン1が正解なんだけど、なぜパターン4は3文字分だけ書き換えるんだろう?
パターン4がOKならパターン5でもいけるような気がするが、パターン5は空白を埋める。
RSet Mid(a, 2, 5) = 123 はエラーになる
0470デフォルトの名無しさん (スプッッ Sd1f-UGZ9)垢版2022/06/12(日) 22:19:45.52ID:+/mRZvLHd
ID:ImMFuzyy0

馬鹿は黙っていればいいのに
そうやって馬鹿を曝け出していると頭の皮膚も曝け出されるぞ
0475デフォルトの名無しさん (ワッチョイ bf3d-VcWV)垢版2022/06/12(日) 23:13:02.41ID:cJxXuNHT0
つまり
Mid(a, 2, 5) = 123

aの2文字目から5文字分ところに、"123"を書き込むんだけど、
3文字しかないから、4-5文字目は何もしないてことだよね。
でも代入の原則論から言えば、足りない部分はスペースで埋めるんじゃないのか?
RSetは足りない部分はスペースで埋めてる。
まあ、それが仕様だて言えばそうだけど、
深く考えて作られてないのかな。
もし、RSetも3文字しか代入しないのなら、RIGHTやFORMATを使わなくても0埋めができるし、
単純な代入だから性能もいいはず。
0479デフォルトの名無しさん (ワッチョイ bf3d-VcWV)垢版2022/06/12(日) 23:54:08.09ID:cJxXuNHT0
>>477
どの言語もできるような気もするが。
出来ない言語なんかあったけ?
化石のような言語のCOBOLでもできる。
COBOLだと9型の変数があって、VBA風にかくと
Dim a as 99999
a = 123
でaを00123にしてくれる。
a=RIGHT("00000" & 123,5)なんてやってるのをみて驚いたわ。
0480デフォルトの名無しさん (ワッチョイ 6310-JG4s)垢版2022/06/12(日) 23:56:26.34ID:as/ibVfq0
ちなみに、MidステートメントはLetステートメントと違ってヒープ領域の再確保を行わないようなので
めちゃくちゃいっぱい文字列を結合したり置き換えたりする文字列操作をMidステートメントで高速化できたりはする
色々注意しなきゃならんしめんどいけど
0482デフォルトの名無しさん (スッップ Sd1f-/e9c)垢版2022/06/13(月) 15:41:58.25ID:e6QxpplAd
文字列の一部分に0付き右詰めの数字を入れたいのだが・・・・
これがやりたい事なんだから
A.MIDステートメントを使うなら右辺の値を5桁固定にする
 Mid(a,2,5) = Format(123,"00000")
B.代入するの文字列を代入先の左側+5桁固定の値+代入先の右側にする
 a = Mid(a,1,1) & Format(123,"00000") & Mid(a,7,Len(a))
あたりに落ち着くのでは 
自分は誤解されないためにもBのようなコードがいいと思うけど
0491デフォルトの名無しさん (ワッチョイ ff7c-a420)垢版2022/06/14(火) 02:02:23.05ID:GVYlqPTN0
今は可読性悪いのは駄目ってなってるけど逆に改行や変数名の長さすらケチってた時代もあった
んで言語が進化するにつれて書き方も変わっていった
今でも昔の方法で書けるっちゃ書けるけどそれが古臭いってことだと思う
0495デフォルトの名無しさん (アウアウウー Sa67-IhGj)垢版2022/06/14(火) 07:54:24.65ID:7uTlYRrCa
>>492
変数にいれないで普通の書くのか?
定数なら定数として定義すると思うが
0498デフォルトの名無しさん (ワッチョイ bf3d-VcWV)垢版2022/06/14(火) 08:37:28.94ID:YQpYn/pu0
郵便番号+電話番号ていう文字列があるんだが、郵便番号、電話番号を別々の変数に入れたいので
こうしてみたんだがうまくいかない。
なにか手はある?
いまType1は項目が2個だけど、なるべく一括で入れたいのだが・・・

Type Type1
Zip As String * 7
telnum As String * 11
End Type

Sub Sample()
Dim b As Type1
a = "151123408012341234"
b = a
End Sub
0499デフォルトの名無しさん (ワッチョイ ff05-bM3h)垢版2022/06/14(火) 09:04:23.14ID:06qw5AlY0
aの文字列が固定長なら
Left(a,7)
Right(a,11)
でダメなんか
0500デフォルトの名無しさん (ブーイモ MM27-GGE9)垢版2022/06/14(火) 09:11:18.76ID:b1sVlKW1M
>>498
C系やVBなら可能だけどVBAではWin32APIを使わないと無理
また、可能だからと言って、複数の変数に一括でデータを入れるような書き方は可読性が下がるので推奨されない

コードをコンパクトに見せたいなら代入部分を以下のようにモジュール化するのがマスト
電話をRightで取り出さないのは、固定電話は桁数が違うから

Sub SetNumbers(ByRef T As Type1, N As String)
  T.Zip = Left(N, 7)
  T.telnum = Mid(N, 8, 11)
End Sub
0501デフォルトの名無しさん (ワッチョイ ff01-NwEC)垢版2022/06/14(火) 10:48:30.78ID:WigeF4Tr0
>>498
若干無理矢理だけどクラス使えば似たような事は出来る
Type1.cls
Private Zip_ As String * 7
Private telnum_ As String * 11
Public Property Let Default(N As String)
Zip_ = Left(N, 7)
telnum = Mid(N, 8)
End Property
Public Property Get Zip()
Zip = Zip_
End Property
Public Property Get telnum()
telnum = telnum_
End Property
デフォルトプロパティの設定がちょっとトリッキー、こことかを参考に
https://thom.hateblo.jp/entry/2015/02/16/003000
あとは
Dim a As New Type1
a = "151123408012341234"
Debug.Print a.Zip
Debug.Print a.telnum
0503デフォルトの名無しさん (スッップ Sd1f-/e9c)垢版2022/06/14(火) 13:11:14.27ID:IIEda1opd
>>498
記憶があいまいだけど
長さの合計値が同じになる変数を持つ構造体を作ってそれをLSetで代入すれば可能だと思う

Type Type1
Zip As String * 7
telnum As String * 11
End Type
Type Type2
Value As String * 18
End Type

Sub Sample()
Dim b As Type1
Dim a As Type1
a.Value = "151123408012341234"
LSet b = a
End Sub
0504デフォルトの名無しさん (ブーイモ MMff-GGE9)垢版2022/06/14(火) 13:57:57.06ID:yUQgc7GAM
>>503
それで代入だけは可能だけど、電話番号が10桁だと末尾に自動的にスペースが入って11文字に補正される
固定長文字列はTrimもできないから、結局構造体を使う方法はトラブルの予感しかしない
0505デフォルトの名無しさん (スッップ Sd1f-/e9c)垢版2022/06/14(火) 14:36:41.07ID:IIEda1opd
>>504
与えられたデータだけの回答だからね
与えられた情報以外の事をあーだこーだいう人いるけど
それはその時考えたらよくない?
そもそもそういう事を言い出したら
質問のできるできないはできないって回答になるわけだし
0506デフォルトの名無しさん (ワッチョイ 732f-bM3h)垢版2022/06/14(火) 14:46:19.33ID:QIi9ICtD0
与えられたデータっていうか、前提条件がはっきりしないからなぁ
>郵便番号+電話番号ていう文字列がある
以外は試してみたっていうコードからの推測だしな

まあおれなら合体文字列のセッターと郵便番号、電話番号のゲッターのプロパティ持つクラス作るかなぁ
中身はLeftとMidでいいんじゃね

固定長で最速を目指すならLSetもありかもしれんが

構造体うんぬんより、固定長文字列がトラブルの予感を感じさせるんだよなぁ、いろんなところで
0507デフォルトの名無しさん (アウアウウー Sa67-IhGj)垢版2022/06/14(火) 15:27:21.00ID:jJwMl27ba
固定長文字列って文字数で良いんだっけ?
全角でもおなじ?
0510デフォルトの名無しさん (ワッチョイ 6310-JG4s)垢版2022/06/14(火) 20:24:08.87ID:sqy53zZK0
>>487
簡単にいうと、なんでもMidステートメントに置き換えれば速くなるってわけでもない(そういう使い方にはちょっと注意がいる)
あと固定長文字列はいかにも速そうだが実は可変長文字列よりパフォーマンスが落ちることが割とあって、これまた扱いに注意を要する
まずは自分の望む動作をするコードを完成させることに注力した方がいいんでないかな
(速度改善や利便性向上みたいなのはなんていうか、キリのない作業でもあるし)
0512デフォルトの名無しさん (アウアウウー Sa67-IhGj)垢版2022/06/15(水) 10:47:02.71ID:EefWJAwfa
自力でやれるなら好きに組めば良いけど
それもできない初心者だからな
0516デフォルトの名無しさん (ワッチョイ 43cc-ffpc)垢版2022/06/15(水) 13:41:42.48ID:HRaMYgOd0
ユーザーフォームに毎回違う数のラベルを作った時に、それぞれのラベルでクリックイベントを作りたいのですが
ラベル数が変動するので作れません。
こういう場合、存在するどのラベルをクリックしたかを調べるにはどうすればいいですか?
0517デフォルトの名無しさん (ワッチョイ f368-zkCy)垢版2022/06/15(水) 14:04:25.53ID:2pwDzYJj0
>>516
昔やろうとしたけど超しんどいよ
vb6にはコントロール配列って機能があってそれを使えばよかったけど、
vbaでなぜかなくなっているので絶望的にめんどくさい
他の方法を考えたほうがいい

どうしてもやるなら「vba コントロール配列」あたりで検索して頑張ってくれ。
https://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_100_040.html
0519516 (ワッチョイ 43cc-ffpc)垢版2022/06/15(水) 17:15:36.58ID:HRaMYgOd0
>>517
他に方法がなさそうなのでこれでやってみます

>>518
Private Sub Label1_Click() を1000個とか作るのはちょっと汚いので止めておきます
0524デフォルトの名無しさん (ブーイモ MM7f-Vvh6)垢版2022/06/15(水) 18:13:02.83ID:Vg/305+8M
構内マップを作らされてその上にマインスイーパみたいな升目を作らされ、機器の設置場所を設定出来るようにしたい。場所の指定は分かりづらいから文字だけにするのはNGね。なんて業務を振られる事も稀によくある
0533デフォルトの名無しさん (ワッチョイ ffda-DKQR)垢版2022/06/15(水) 19:57:21.42ID:TJhxNtAv0
昔ながらの紙の地図帳をイメージすればいいのか
最初のページで全体図をマッピングした概略図を掲げといて
詳細の判るまで拡大した一ページ(※)をマス目で区切って、縦に 1 2 3 横に A B C とか振り分けて
例えば B 4 とかをクリックしたら「設備名」の詳細を表示するとかか?

ユーザーフォームでそれぞれのマス目を呼び出すよりは、インデックスのSheetに全体図
そこをクリックで各Sheet (※)へジャンプとかのが楽そう  上が承認するかどうかだけど
上に承認してもらうようにサンプル作ってプレゼンしてもいいし
0534デフォルトの名無しさん (スッップ Sd1f-UWq1)垢版2022/06/15(水) 21:04:50.79ID:m3jNjkHdd
コントロールフォームの動的配置 & クラスモジュールでイベント起こすに一票
どうせどこかでイベント共通化の処理が入るだろうからスケーラビリティ確保のためにも
0537デフォルトの名無しさん (ワッチョイ 4363-b1tp)垢版2022/06/16(木) 07:24:34.47ID:FKA1V1750
テキストファイルを開いて1行ずつ中身を読んでます。
Open ファイル名 For Input As fNo
Line Input fNo, buff
途中まで読んだあと、先頭から読み直したいです。
ファイルを閉じてまた開くのは嫌です!
下のURLを参考にして、
FileSystemObjectを使ってすべてを1変数に読み込み
改行コードで区切って配列化して
先頭から読み直したいときは配列の先頭から読みなおし
という方法を思いつきましたがコード修正が大変なので
もっと楽な方法をご教示いただけたら幸いです。
tps://bokulog.org/vba-read-file/
0542デフォルトの名無しさん (アウアウウー Sa67-IhGj)垢版2022/06/16(木) 10:17:53.34ID:G3W4msQ6a
>>537
ファイルを閉じて開き直すのが祖谷な理由が書かれてませんので
嫌でもやればいいんじゃね
0544デフォルトの名無しさん (ワッチョイ 732f-TFwb)垢版2022/06/16(木) 13:56:39.50ID:j/xQYS4f0
サポートしないだけで
PC内にIEがある限り
永久に使えるんじゃないか?
0552デフォルトの名無しさん (スプッッ Sddf-GGE9)垢版2022/06/17(金) 08:55:59.12ID:LpDNne3Kd
IEで終了したのは「アプリ」の「サポート」だけだぞ
IEオブジェクトはしばらく残すと明言してるから、マクロから使うのはまだ問題ない

けど、猶予期間の今のうちに社内ルールの変更など根回しはちゃんとやっとけよ
0553デフォルトの名無しさん (スッップ Sd1f-UWq1)垢版2022/06/17(金) 13:19:56.68ID:6WxlvkUPd
IEが非対応のサイトも増えてくるから対策出来るならした方が良いのはわかってる
が現状Selenium Webdriverが最適解のようでいちいちバージョン合わせるためにダウンロードしたり記述が変わったりすげー面倒

MSがどうにかしてくれると淡い期待をしたいが
0555デフォルトの名無しさん (ワッチョイ 9a4f-+QtH)垢版2022/06/18(土) 06:12:14.25ID:tcSE7QQr0
まぁしょうがない
良かれ悪かれ何でも時代の変化で変わって行く
VBAは関係ないけどちょっと前にとあるシステムで
IE → EDGE の移行作業行ったよ
開発ツールは確かにIEの方がEDGEより
使いやすかったと思う。慣れだろうけどね。
0559デフォルトの名無しさん (アウアウウー Sa47-iAjv)垢版2022/06/18(土) 10:08:32.00ID:Os2AgP5Ia
ieで取れなかった個人情報を集めてるからな
0560デフォルトの名無しさん (ワッチョイ 17f6-vQ73)垢版2022/06/18(土) 10:59:15.44ID:0BdDrqNN0
ExcelもIEも何年も使ってないわ
kneetじゃねーよ
0568デフォルトの名無しさん (ササクッテロレ Sp3b-+QtH)垢版2022/06/19(日) 10:44:47.27ID:uZGRAEGZp
Power shellは
.Net Freamworkが入ってなければただのShellだもんな
なら素直にVSの類いれとけばいい
0570デフォルトの名無しさん (スップ Sdba-oPsP)垢版2022/06/19(日) 21:33:18.64ID:nfQGh1M+d
追加でWebからインストールしなきゃいけないPowerShell(6以降)に存在価値はない
それが許されるんならあえてPowerShellなんて使わずとももっと優れた選択肢がいくらでもある
0572デフォルトの名無しさん (スップ Sdba-oPsP)垢版2022/06/20(月) 09:16:41.32ID:ZiXH0O+ed
win11でも入ってるのは5だけ
6以降はサポート期限がLTSでもリリースから2年しかないから、
仮にWindowsにプリインストールすると2年ごとにWindowsの更新で強制的にメジャーバージョンが上がって既存資産がぶっ壊れるリスクが生じる
だからどうしてもユーザーの自己責任で塩漬けにできる選択肢が必要で、Windowsの一部として扱うことが不可能なんだよ
0574デフォルトの名無しさん (オッペケ Sr3b-QJpe)垢版2022/06/21(火) 15:16:20.71ID:nrTPRY1Pr
質問です
ある動画で「連想配列とユーザー定義型を組み合わせると便利」ということで色々勉強していたのですが、ユーザー定義型ってpublic宣言しても別モジュールで呼び出せないですよね?
てことは別モジュールにプロシージャがあって、それを引数設定して呼び出してもエラーになりました
そこでクラスモジュールを使っても同じような事ができると聞き、クラスモジュール内に3つ型を宣言した変数を作ったのですが、それを配列に入れようとすると「配列に入れることができません」というエラーがでます
具体的には以下のとおりです
Dim c() as class1
Set c = New class1 ←ここでエラーがおきます
この記述を
Dim c() as New class1
とすればエラーは起きないのですが、別モジュールの引数に
sub test(c as New class1)と記述はできないので困っています
なにかいい方法はないでしょうか?
0582デフォルトの名無しさん (スップ Sdba-sER5)垢版2022/06/22(水) 11:11:38.88ID:SHGr4jOjd
完全にネタ、作り話だろこれ

そもそもVBAごときでミスが起きないシステムなんて作るの不可能だし
マクロはたくさんある工程の一つに過ぎないんだから、業務全体で見ればミスが起きる余地なんてほかにいくらでもあるだろうに
0586デフォルトの名無しさん (アウアウウー Sa47-iAjv)垢版2022/06/22(水) 13:45:53.56ID:5jQGKRYma
マクロの作成頼まれたけど要求内容があまりにも怪しかったので、
マクロと一緒に「入力に対する出力が合っているか」と「そもそもの入力が誤っていないか」を簡易的に(電卓などで)求められる計算方法を渡した
そしたら約3ヶ月に一回ぐらいの割合でそもそもの入力すべきデータを誤っていたことが判明した
ってことはあったな
後で調べたら、こういうのは「封筒裏の計算」っていう手法らしいけど
0591デフォルトの名無しさん (ワッチョイ 3b5f-sER5)垢版2022/06/22(水) 19:47:11.74ID:5Bb+Exnq0
ワークシート上の(1=1)、つまりTRUE値は「1」だけど
VBAでのTrue値は「-1」だから合ってる
0593デフォルトの名無しさん (ワッチョイ 1763-WaTF)垢版2022/06/23(木) 00:03:21.37ID:RpD62pBf0
VBAは好き
どんな職場で働けばいいの?
正社員じゃなくていいです。
0594デフォルトの名無しさん (ブーイモ MMba-S7oR)垢版2022/06/23(木) 06:39:08.02ID:d1WC2qsrM
>>593
事務派遣。
ゆるい職場ならvba使用が禁止されて無いから与えられた業務で使って見ればいい。
0597デフォルトの名無しさん (ワッチョイ 1768-GvQ2)垢版2022/06/23(木) 07:40:40.65ID:SBEKkY350
>>593
派遣おすすめ
vba縛りの事務なら、めちゃくちゃ楽で定時に帰れる
そういう人を見たことある

一生生きていけるだけの金もってたら、
そういう人生送りたかったってぐらいやりたい生き方だわ
0602デフォルトの名無しさん (アウアウウー Sa47-vQ73)垢版2022/06/23(木) 10:56:16.87ID:M4XLJX6ga
いまさらVBAには関わりたくないな
そもそもVBA自体よりもVBAを使ってる連中と関わりたくない
0603デフォルトの名無しさん (アウアウウー Sa47-iAjv)垢版2022/06/23(木) 12:20:08.77ID:QS7NhMN+a
安定のNHK
0608デフォルトの名無しさん (ワッチョイ b393-rgQ2)垢版2022/06/23(木) 14:41:25.25ID:RH4NXyqT0
>>607
世の中を知らなすぎ
どんどんVBAは消えていってる
MSすらVBAではなくPython導入しようとしてたが、
openpyxlやxlwingsの出来が良かったのでそれらを薦めてるんだよ
突然IEのサポートが終わるとか言ってる奴くらいだぞ知らないの
0610デフォルトの名無しさん (スップ Sd5a-KtZt)垢版2022/06/23(木) 14:51:02.16ID:9dA5CJ8Sd
そのツールでできるならどんなの選んでもいいだろ
>>608みたいなのはそんなこともわからず俺こんなの知ってるぜスゲーだろって言いたいだけのかまってちゃんだろ
VBAはそもそも基本的にWindowsPCなら入っているであろうExcelさえあれば
他に何も入れなくても使う事ができるという1点で他にはない優位性があるわけだし
職場によっては変なものを入れるのはNGみたいなところもあるんだから
そういう事も踏まえないでただ批判だけするのはおかしい話
0611デフォルトの名無しさん (アウアウウー Sa47-vQ73)垢版2022/06/23(木) 15:10:52.41ID:Ukh7Grgra
ほらな
やっぱりVBAだろ
0612デフォルトの名無しさん (ワッチョイ b393-rgQ2)垢版2022/06/23(木) 15:22:59.47ID:RH4NXyqT0
>>609
VBAからPythonへのリファクタリングが進んでるって話だよ
リファクタリングって新規開発ではなく保守なんだけど理解できないようだしなw
今後もVBA使っていくつもりなら、
VBAがやがてどうなるとか調べるのはかまってちゃん以外でも当然の行為だろ
ましてや仕事なら尚のこと
0614デフォルトの名無しさん (ワッチョイ 1768-GvQ2)垢版2022/06/23(木) 15:45:42.70ID:SBEKkY350
エクセル・accessの簡易的・汎用的な入力方法を全部捨てて、
pythonで作り直す案件とはどういうものなのだろうか?
概算するまでもなくものすごく高くなるんだけど、一体どういう案件だとコストダウンになるのだろう?
早く回答してほしいなぁ。まだかなぁ
0625デフォルトの名無しさん (ワッチョイ 1768-GvQ2)垢版2022/06/23(木) 21:25:01.78ID:SBEKkY350
>>624
知らんよ。俺は見たことない

どんな案件にでも対応できるからユーザー側がpythonを指定して発注することは少ないだろう
開発側の好みでpythonを選んでいるだけだろうな
webサーバーで処理するという点ではエクセル→スプレッドシートの移行にかなり近い。
0629デフォルトの名無しさん (ワッチョイ 9a4f-+QtH)垢版2022/06/24(金) 03:54:27.16ID:ctS3zPLY0
まぁ手広くやるかVBA極めるかだろうけどある程度は手広くやらないとね
「VBAは死ぬ」と言われてもう随分経つけど一向に死ぬ気配はないのは確かだけど
VBAしか出来ないとOfficeに乗っかったアプリしか開発出来ない井の中の蛙状態になるのも確か。

それに他言語やってるとその言語の考え方も取り入れてVBA作るようになるから何かひとつやるにしても取れる手段が増えるんだよね。

まぁ個人的にはPythonは下手に手をつけると算数しか出来ないバカな俺には数学出来ないといけないお仕事が降ってきそうでちょっと敬遠するけど。

後JAVAは個人的に肌に合わなかったのでやって良かったってなるのか分からないけど、
JavaScriptはWeb系やるならまず必須になるし、とりま後はC#辺りやっとけばいいんじゃないかと思う。
0630デフォルトの名無しさん (ワッチョイ 9a4f-+QtH)垢版2022/06/24(金) 04:14:34.15ID:ctS3zPLY0
後、このスレには俺みたいなジジイが結構いるみたいだから話しておくと、
遠い昔まだPCがマイコンとか呼ばれていた頃、すがやみつるって「ゲームセンターあらし」とかいう漫画描いてた人が「こんにちはマイコン」ってBASICでブロックの無いブロック崩しみたいなののプログラムを作る工程を漫画で説明しながら描いてたんだけど、
ちょっと前に「こんにちはPython 」って同じ感じの内容をPython でやってるのを出してたから話のネタに買ってもいいかも知れないよ。
ただ、新品買うほどの価値があるかは微妙だから中古でもいいと思うけど。

まぁスレ違いだからこの辺にしとくわ。
0631デフォルトの名無しさん (ワッチョイ 4b02-WaTF)垢版2022/06/24(金) 04:39:40.48ID:61TcLrsp0
activecellを使って掛け算をしたい時どうすればいいのか分かりません
教えていただけたら嬉しいです。
inputboxで数値を入力してその数値を使って計算したいです。計算する時にactivecellを使いたいです
0633デフォルトの名無しさん (アウアウウー Sa47-vQ73)垢版2022/06/24(金) 09:49:37.06ID:K2we1Lara
こういうのが尼崎事件を起こすんだろうな
0634デフォルトの名無しさん (アウアウウー Sa47-iAjv)垢版2022/06/24(金) 12:20:36.40ID:SlsiDUV+a
需要と供給
0636デフォルトの名無しさん (ワッチョイ 3b5f-8Usu)垢版2022/06/24(金) 15:26:03.25ID:bvc+MoD20
VBA覚えるの大変ですね
理解してコピペできるくらいにはなりたい
0637デフォルトの名無しさん (HK 0Hca-j7e5)垢版2022/06/24(金) 15:31:46.16ID:RLAl6U0RH
一度VBAエキスパートとか取るくらい勉強すれば
毎回Offsetの横は行が先か列が先かどっちだったかな?って(Resizeでも同じことやってる)やってるワイでも
大体コピペで作れるくらいには成長するよw
0638デフォルトの名無しさん (ワッチョイ 3b5f-8Usu)垢版2022/06/24(金) 19:49:28.19ID:bvc+MoD20
>>637
ありがとう
やってみるか
参考書検討しようかな
0643デフォルトの名無しさん (ワッチョイ da59-2kOI)垢版2022/06/24(金) 23:00:17.91ID:oJCwQA/d0
ネットにうpしてあった100行のやつをコピペして100000行にしてる、コンパクトという発想がなかったわ。そもそも意味わかんない行もあるけど消すと動かないし。
後任に渡そうと思ったけど恥ずかしいからやめとくか...。
おまえら上級者なんだね。
0648デフォルトの名無しさん (TW 0H9f-b1XO)垢版2022/06/25(土) 09:09:54.09ID:HMw3/wS6H
自分で一から書ける能力があればわざわざコピーなんざしないのさ。。。(-_-)

切り貼りつぎはぎだらけで変数の宣言がぐちゃぐちゃになってる
分かってくれる人いないかな(笑)
0650デフォルトの名無しさん (アウアウウー Sad3-n9/C)垢版2022/06/25(土) 10:00:09.34ID:kapo/xgia
コピペが悪いのではなく、コピペで作ったコードを自分が提供した責任があるのだよ
0652デフォルトの名無しさん (ワッチョイ 7f10-60CD)垢版2022/06/25(土) 10:49:20.62ID:Wc9Qs34b0
>>648
分かるけど理解はしない
それを許したらそこでおしまい
0654デフォルトの名無しさん (スッップ Sd5f-gXkX)垢版2022/06/25(土) 12:26:01.77ID:W4jZJdCLd
書ける能力あっても今までに作ったコードをコピペするだろ?
場合によっては共通関数の入ったモジュール程度を持ってくるにしても
お前らもしかして同じこと1から書いてるの?
0655デフォルトの名無しさん (オッペケ Sra3-RiBi)垢版2022/06/25(土) 12:41:36.76ID:7YC4We+Er
別部署に行って、「規則が変わるからこのマクロも修正してくれ」って言われ、中を見てみたらセレクトメゾットやコピーメゾットが使われてた時の絶望感
「クリップボードの履歴を有効にしていると正常に作動しない事があるから必ず無効にしてくれ」ってそれ書き方おかしくないか?
そして変数の宣言が強制されていなくて更に絶望する
0660デフォルトの名無しさん (ワッチョイ 3fda-eqyh)垢版2022/06/25(土) 18:56:11.02ID:XeF3ZBAK0
それどころか回りの奴らはVBAにしろExcelの学習すらやろうとしない。
仕事終わったら飲みに行く事しか考えていない。休日も何も努力しない現実。
興味ないヤツには進めてもダメなのかな
0671デフォルトの名無しさん (ワッチョイ 3f4f-60CD)垢版2022/06/26(日) 07:38:11.30ID:5vPg/0Rp0
他言語やったからって
excelやVBAでやったことが無駄になることはないよ
他の言語で作ったもののUTのエビデンスをとるのに
excelがもし無ければと思うとゾッとするし
テストデータ作成にもVBA使うととっても便利な場合が多いし
0672デフォルトの名無しさん (ワッチョイ 8f63-BYhf)垢版2022/06/26(日) 09:43:13.22ID:/e5N//9v0
エクセルのある列に数字が入ってます。
そのエクセルと同じ階層にあるフォルダの下に
上記の数字から始まる名前のフォルダがあります。
(数字のあとに日本語が付いてます)
このフォルダの探し方を教えていただきたく
0673デフォルトの名無しさん (ワッチョイ 0f63-BYhf)垢版2022/06/26(日) 09:45:37.60ID:Xa6L6yDT0
会社のパソコンでVBAを使って
pdfをテキストへ変換しています。
(com.adobe.acrobat.plain-text)
変換処理は不安定でエラーが出ることが多いが
成功することが多いです。
しかし有料ライセンスは一切買ってもらっていません。
これはライセンス違反ですよね??
違反ならもうやめます。
0674デフォルトの名無しさん (ブーイモ MM5f-c/Mv)垢版2022/06/26(日) 09:56:38.78ID:IFq6Yt8DM
>>672
num=cells(行,列).value
dirname=dir(thisworkbook.path&"\"&num&"*",vbDirectory)
0675デフォルトの名無しさん (ブーイモ MM5f-c/Mv)垢版2022/06/26(日) 09:59:07.88ID:IFq6Yt8DM
dirname=dir(thisworkbook.path & "\" & num & "*", vbDirectory)
0679デフォルトの名無しさん (ワッチョイ 4f0e-6kVq)垢版2022/06/26(日) 12:11:58.60ID:hFDBYOe90
クラスが入ってるCollectionの要素を置き換えるにはどうすればよいでしょうか?

Set col(2)=New MyClass()

とやってもできないんです。
0681デフォルトの名無しさん (ワッチョイ 4f0e-6kVq)垢版2022/06/26(日) 13:30:17.16ID:hFDBYOe90
>>680
そうですか
ありがとうございます

でもなぜ置き換えできないのでしょう?
そのしくみを理解したいのですが
スキルがあがるステップだと思うので
0682デフォルトの名無しさん (オッペケ Sra3-zdXj)垢版2022/06/26(日) 13:35:51.31ID:VKkh0pnir
IEの入力欄に値いれるマクロ使ってたんだけど、エッジに移行して動かなくなったんよ
エッジの入力欄いじる方法ってご存知ないですか?
調べてもよくわからなくて
0686デフォルトの名無しさん (ワッチョイ 4f0e-6kVq)垢版2022/06/26(日) 15:26:20.76ID:hFDBYOe90
なぜMsedge.Applicationにしないの?
0687デフォルトの名無しさん (ワッチョイ 4f0e-6kVq)垢版2022/06/26(日) 15:32:17.63ID:hFDBYOe90
クラス(例:MyClass)が入ってるCollectionの要素(つまりMyClass)をある条件でsortしたいのですが
簡単な方法はないのですよね?
これは標準モジュールにそのソート用のsubかfunctionを書くのが一般的ですか?
「ある条件」というのが複数あるので、複数個それを作るのが面倒。
あといま思い付いたけど、そのCollectionをメンバとして含む親クラスをつくり、その親クラスにその複数のsortに相当するfunctionを作るのがカッコイイです?
0692デフォルトの名無しさん (ワッチョイ 3f3d-9oGY)垢版2022/06/26(日) 22:39:05.59ID:h799Melv0
>>690
VBEでF5なら動くが、
エクセル本体で開発タブのマクロボタン押すとああなる。
ちなみにバージョンは2013。
マクロ名が英字2字+数字だと、マクロボタン押すとそのアドレスのセルに飛ばされるな。
もちろんマクロは実行できない。
そんな制限あったけ?
セルのアドレスて「予約語」になるのか?
0698デフォルトの名無しさん (ワッチョイ 4f0e-6kVq)垢版2022/06/27(月) 07:28:39.14ID:JHJu1s6G0
For each i in collection
 if a=1 then
  if b=1 then
   if c=1 then
    Debug.print "うんこ"
   end if
  end if
 end if
next i

こんな階層はしないほうがいいですか?もしそうならどうすべきですか?
ちなみに実際の条件文はa=1などのように単純ではなくてもっと複雑怪奇で長い文字列です。
0703デフォルトの名無しさん (スップ Sddf-gXkX)垢版2022/06/27(月) 09:20:29.88ID:WYWqaC3Yd
>>698
何がしたくてそのIF文を書いてるかわからないけどELSEに対しての記述がなければ>>700みたいな書き方にしてもいいけど
自分はその程度のネストは許容範囲だけどね
それとなんでしないほうがいいと思ったかも書くと他の回答もらえるかもね
0705デフォルトの名無しさん (スプッッ Sdbf-tCSL)垢版2022/06/27(月) 09:27:26.36ID:HPVEPi/ad
Excel2021でも再現したわ
セル番地はモジュール名にできないのか、知らんかった

捨て変数とか作業ファイル名なんか普通にaaa1とか使ってるから、いつひっかかってもおかしくなかったのに
思い返してみると、なぜか捨てSubはtest1とかmacro1にしてた
0708デフォルトの名無しさん (ワッチョイ 8f5f-tCSL)垢版2022/06/27(月) 09:36:09.63ID:kVADuAyl0
>>698
いわゆる早期リターンとかガード節ってやつ

For Each i In Collection
If a <> 1 Then GoTo continue
If b <> 1 Then GoTo continue
If c = 1 Then
Debug.Print "OK"
End If
continue:
Next
0709デフォルトの名無しさん (スップ Sddf-gXkX)垢版2022/06/27(月) 09:50:33.84ID:WYWqaC3Yd
>>708
自分としてはもともとの判定を変更するような回答はどうかと思ったりするんだよね
複雑怪奇とかいてるのでわかりやすい回答なら「if not (a = 1) then」にしたほうがいいのではないかと
それとそこまで書いたらcの判定もcontinueで飛ばしたほうがすっきりするかと
0711デフォルトの名無しさん (アウアウウー Sad3-n9/C)垢版2022/06/27(月) 10:00:09.47ID:Do3p35pda
>>698
内容がわかるようにコメントつければいいんじゃね
0714デフォルトの名無しさん (ワッチョイ 3f01-DrrO)垢版2022/06/27(月) 10:24:13.47ID:3L19Fpz+0
>>698
一般論としてネストは浅い方が理解しやすいからそのコードであれば>>700>>708みたいにした方が読み易い
ただ>>701が言うようにVBAにはショートサーキット(短絡評価)がないので遅くなるのはいいとしても
If N <= UBound(A) And A(N) = 1 Then ...
みたいなのは
If N <= UBound(A) Then
If A(N) = 1 Then ...
のようにする必要がある
0715デフォルトの名無しさん (ワッチョイ 8f5f-tCSL)垢版2022/06/27(月) 10:29:53.48ID:kVADuAyl0
まあ、複雑な判定するならメソッドに切り出すのが間違いないわな
VBEだとIDEのサポートないから若干めんどくさいけど
0718デフォルトの名無しさん (アウアウウー Sad3-0NSx)垢版2022/06/27(月) 11:05:37.12ID:zkyvRAcfa
あんまりにもネストするなら、判定文(if複数)だけ別プロシージャ(Function)として外出しして、TrueかFalseを返させるようにするかな
IsGoukaku みたいなプロシージャ名にすると何したいかがわかってメンテ楽だし
0719デフォルトの名無しさん (ワッチョイ 3f3d-9oGY)垢版2022/06/27(月) 11:29:16.42ID:gUdOjGv30
セル番地がダメならダメでいいけど、あんな挙動をするのはバグだよ。
本来はメッセージだして弾くべきじゃね?
office365でも同じならだれかMSにチクってみてくれ。
以前、MSの掲示板にWinの不具合を書いたら、
速攻で消されたが、
こっちでも確認できたから開発にレポしといたていうメールが来て感動したわ。
0721デフォルトの名無しさん (ワッチョイ 3f3d-9oGY)垢版2022/06/27(月) 11:34:53.87ID:gUdOjGv30
>>700
if a=1 and b=1 and c=1
にすると内部では判断を3回することになる。

if a=1 then
if b=1 then
if c=1 then
にすると判断は少なくなるのだから、ネストするほうが正解じゃね?
もちろん、ifを書く順番は判定が少なくするようにする必要はあるが。
0726デフォルトの名無しさん (ワッチョイ ff68-TsA2)垢版2022/06/27(月) 11:59:27.42ID:iDqL/u9w0
頻度はwindoewsやエクセルに比べたらかなり低いけど、やってるよ
確かちょっとずつ便利になってる。本当にちょっとだけ。関数が増えたりはしていないはず。
ソース探したけど見つからねぇ
0731デフォルトの名無しさん (ワッチョイ ff02-tQxS)垢版2022/06/27(月) 19:57:12.47ID:UdQiWAN30
どなたか教えてください。

売掛金消し込みのマクロを作成しています。VBAでソルバーを自動化したいと思っています。

目的セル、制約条件の参照セルの開始行が40行ごとに下がっていき、指定値は数値ではなく、セルを指定したいです。

とりあえず、全部の変数をvariant型にしてますが、なかなか上手くいきません。
0732デフォルトの名無しさん (ワッチョイ ff02-tQxS)垢版2022/06/27(月) 20:18:45.52ID:UdQiWAN30
731です。

sub ソルバー()

dim 振込1 as variant
振込1=worksheets("ソルバー").range("n2:n8")

solverok setcell:= worksheets("ソルバー").range("i3"),
maxminval:=3,
valueof:=振込1,
bychange:=worksheets("ソルバー").range("e2:e40"),
enginedesc:="grg nonliner"


solveradd celreff:=worksheets("ソルバー").range("e2:e40"),relation:=4

solversolve userfinish=true
0734デフォルトの名無しさん (ワッチョイ ff02-tQxS)垢版2022/06/27(月) 20:26:50.30ID:UdQiWAN30
>>733

ソルバーを実行しても、目的セルが0のままで指定値にと一致する金額の組み合わせが見つかりません。

どの請求分の入金なのか、突合したいです。
0735デフォルトの名無しさん (アウアウウー Sad3-0NSx)垢版2022/06/27(月) 20:35:36.69ID:9IVJ+eiIa
>>734
ソルバーわからんから確認させてください
振込1って変数は配列に入れた値を指定したいものですか?それともセル自体を指定したいものですか?
前者であればそれでいいですが、後者なら変数はRange型にする上で代入時に
Set 振込1 =〇〇
としないといけませんが…
0736デフォルトの名無しさん (ワッチョイ ff02-tQxS)垢版2022/06/27(月) 20:37:19.75ID:UdQiWAN30
連投すみません。

変数宣言して、for〜next構文でe列を("e"&i+40)や、n列も("n"&i+40)みたいにしたいんです。

d列には請求金額、e列は空白、目的セルにはsumproduct関数が入ってます。

指定値セルはn2:n8で、それぞれ違う金額が入力されてます。入金額とn2:n8内の金額が一致する組み合わせの請求金額をVBAを使って、求めたいです。
0737デフォルトの名無しさん (ワッチョイ ff02-tQxS)垢版2022/06/27(月) 20:39:44.13ID:UdQiWAN30
>>735

ありがとうございます。
ヘルプを確認したら、指定値はバリアント型で書けとあったので、なんとなくvariantにしていました。
0738デフォルトの名無しさん (スプッッ Sd5f-h9lZ)垢版2022/06/27(月) 20:45:55.27ID:qw9z/asOd
>>737
マルチ死ね
0740デフォルトの名無しさん (ワッチョイ ff02-tQxS)垢版2022/06/27(月) 21:09:33.28ID:UdQiWAN30
>>739
sub または functionが定義されませんエラーが出ます…
0741デフォルトの名無しさん (ワッチョイ ff02-tQxS)垢版2022/06/27(月) 21:10:43.06ID:UdQiWAN30
>>739

cellsも以前試したんですが、上手いこといきませんでした
0742デフォルトの名無しさん (ワントンキン MM0f-5jmv)垢版2022/06/27(月) 23:45:06.09ID:8dHt2RWvM
こんな奴が作るプログラムで金勘定とか笑えるわ
己を知らないって馬鹿の特徴なんだよな
0745デフォルトの名無しさん (ワッチョイ 7fda-n9/C)垢版2022/06/28(火) 05:51:37.94ID:kKObdKOQ0
オレオレ詐欺の手伝い?
0746デフォルトの名無しさん (アウアウウー Sad3-n9/C)垢版2022/06/28(火) 07:36:23.45ID:XbsSoqMza
>>736
なんで会計ソフト使わないの?
0749デフォルトの名無しさん (ワッチョイ 3f4f-60CD)垢版2022/06/28(火) 09:10:04.94ID:3ZxXgE6I0
>>748
それの意味解る?
ちょっと前に同じ様なコード載せてた人いたけど
複数範囲は一度に設定できないって嘆いていたよ
0750デフォルトの名無しさん (ワッチョイ cfda-f2JP)垢版2022/06/28(火) 09:10:36.27ID:a//tJk240
>>732
solverを使うときのパラメーターの設定の方法が間違ってんじゃない。多分値渡しではなくsetを使うと思うよ。
まずマクロの記録もう使ってなんでもいいからsolverで問題を解いてみて、solverを使うときの正しいVBA の書き方を確認しなさい。
0755デフォルトの名無しさん (ワッチョイ 8f21-tCSL)垢版2022/06/28(火) 17:20:05.57ID:mlWlUbMB0
すみません、神様達、教えてください

エクセルVBAでは
関数内関数はどうやって作れますか?
また複数の関数を目的別に整理する方法として
パッケージやモジュール単位にまとめたり
マップに収納したりはできるのでしょうか?
0759デフォルトの名無しさん (JP 0Ha3-tCSL)垢版2022/06/28(火) 19:15:28.84ID:+0CREnk7H
>>756
ちょっと凝視してみます

>>758
疑似コードですけど例えば、
Function out()
 Function in1()
 End Function
Dim a=Function in2()
End Function
out=Array(in1,a)
End Function

みたいな感じで
関数outの中に関数in1を宣言したり
変数に関数を代入して、returnしたりしたいのです
0760デフォルトの名無しさん (ワッチョイ 8f5f-tCSL)垢版2022/06/28(火) 19:22:25.73ID:EFCYXnQm0
ローカル関数もサポートされてないし
関数をオブジェクトとして扱えないので変数への代入も無理です
0762デフォルトの名無しさん (JP 0Ha3-tCSL)垢版2022/06/28(火) 19:29:24.91ID:+0CREnk7H
>>760
ありがとうございます
なるほどです
すっきりしました、神様ありがとう

モジュールを使いながら関数を整理するか
関数用にファイルを作って管理するかします
0765デフォルトの名無しさん (ワッチョイ ff68-TsA2)垢版2022/06/28(火) 20:17:06.37ID:8yuWSL180
関数内関数ってのは、関数の中で定義する関数のこと
phpだと

sub foo1
if a = b then

 sub foo2
  foo2=1
 end sub

else if

 sub foo2
  foo2=2
 end sub

end sub

みたいなことができる
あんまやらんけど
0766デフォルトの名無しさん (ワッチョイ cfda-f2JP)垢版2022/06/28(火) 20:22:34.06ID:a//tJk240
>>759
関数内関数をそこで書いているようなやり方ではできないけれど、どうしてもやりたければ vbe オブジェクトを定義してそこにコードを書き込むという疑似なやり方はできる。あるいはコードを作成するプロシージャを作成してそのプロシージャを呼び出して引数を渡してコード作った後、そのコードを呼び出すみたいなことはできるのかもしれない。
コードを実行中に別のコードを作成するという経験がないんでエラーが出るかどうかは分からない。

ただ面倒だし見通しも悪くなるんで外側で関数を定義した方が簡単だと思うんだけれどなぜ関数の中で関数を定義したいのでしょうか。
0767デフォルトの名無しさん (JP 0Ha3-tCSL)垢版2022/06/28(火) 20:32:39.05ID:+0CREnk7H
>>766
ありがとうございます
vbaがエクセル前提の言語と考えると
私が考えているような関数は使うべきでもないのだなって思いました

神様たちのアドバイスに感謝です
ありがとうございました
0769デフォルトの名無しさん (JP 0Ha3-tCSL)垢版2022/06/28(火) 20:50:26.07ID:+0CREnk7H
>>766
なぜ関数の中で関数を定義したいのか

すべての関数を同列に記載すると見通しが悪い気がして
例えば数式に関するものなら、calcurationでまとめ
出力に関するものなら、printでまとめ
保存に関するものなら、saveでまとめ
っていうように、目的別、機能別、階層別に関数をまとめると
後で見直したときに分かりやすいかなって

さらにfacadeみたいに間口を作れば
拡張も修正もしやすいかなって思いまして
0770デフォルトの名無しさん (ワッチョイ ff68-TsA2)垢版2022/06/28(火) 20:56:44.33ID:8yuWSL180
>>755
>関数内関数はどうやって作れますか?
関数内関数はない
classは貧弱だけど、ある
ただvbaそもそもの概念として、エクセルのスクリプトであるという点がある
あんまり大きなclass作りたいなら、別言語の方が良いと思う
エクセルvbaはゲームとかもキツイ(メインloopが超貧弱でvbaを起動しっぱなしだとよく落ちる)

>また複数の関数を目的別に整理する方法として
>パッケージやモジュール単位にまとめたり
>マップに収納したりはできるのでしょうか?
標準モジュール単位でまとめられるけど・・・
エクセルvbaの標準モジュールは「どのシートにも共通する処理」のような意味合いで用いられる

よくも悪くも、vbaはエクセルのためにあるので
あまり壮大な事をするのには向いていない
0771デフォルトの名無しさん (JP 0Ha3-tCSL)垢版2022/06/28(火) 20:59:53.87ID:+0CREnk7H
>>770
class調べてみます!
モジュールとclassが使えれば
見やすいコードかけるかも!

そんな壮大なプログラムを作るつもりなないのですけど
一処理、一関数にしたいとなると
ある程度の単位で処理をまとめていきたいなって

ご丁寧なご解説に感謝です
ありがとう、神様!
0772デフォルトの名無しさん (ワッチョイ ff02-tQxS)垢版2022/06/28(火) 21:13:22.89ID:i28fB/zi0
>>750
アドバイスありがとうございます!

入金消し込みの自動化をせよと上司からの指示で、初心者なりになんとかやってるんですが、会計ソフトの会社でもお手上げな仕組みの売掛金管理のようです。

setとcellsでなんとか、試行錯誤してやってみようと思います!

またわからなくなったら、質問させて頂きます。
0773デフォルトの名無しさん (アウアウウー Sad3-/ybv)垢版2022/06/28(火) 21:26:40.99ID:WQvDBuzoa
十年近くぶりに触るし上級者だったとかじゃないけど
VBAで
今開いてるPhotoshopの選択しているレイヤーを基準にExcelの指定セル範囲(例:A1からA20)を1セルごとにレイヤーを1枚作りセルの中身を文字ツール(テキスト)でレイヤーを作成。
例:ExcelのA1に「あいう」、A2に「えお」、A3に「123」が入力されていたとし、指定範囲選択(A1〜A3)を、開いてるPhotoshopにレイヤー追加しながらテキストレイヤー「あいう」、「えお」、「123」を作る(計3枚)。その際、Excelに近い見た目の形で…この場合、横に少し間隔を空けて「あいう」「えお」「123」が並ぶように作成する。(文字の大きさや色は直前に使ったpxサイズ、色とする)
って出来ますか?
0774デフォルトの名無しさん (ワッチョイ 3f4f-60CD)垢版2022/06/28(火) 21:45:50.92ID:3ZxXgE6I0
いや、関数内関数?
まぁ似たようなものはあるよ。
GOSUBってのが。

ただ、これも負の遺産のひとつだから
あまり使うことはお勧め出来ないけど。
0778デフォルトの名無しさん (ワッチョイ 8f5f-tCSL)垢版2022/06/28(火) 23:36:42.40ID:EFCYXnQm0
>>773
COM経由で操作できるっぽい。こんなのが引っかかった
https://minatoya.work/419/
0781デフォルトの名無しさん (ワッチョイ 4fda-hyng)垢版2022/06/29(水) 08:48:09.67ID:sZpGYWcf0
ユーザー定義関数では(コーディング時に)関数を自作することはできるが、(実行中に)関数内で関数を定義したり
(実行中の)関数の引数に関数そのものを与えるたりすることはできない
そもそもユーザー定義関数とLAMBDA関数はまったく別のもの

Excelの新関数「LAMBDA」(ラムダ)が一般提供開始 ~Excel数式が本格的なプログラミング言語に
https://forest.watch.impress.co.jp/docs/news/1387035.html
0784デフォルトの名無しさん (アウアウウー Sad3-n9/C)垢版2022/06/29(水) 10:34:47.30ID:7c8LgVFIa
privateで良くないか
0786デフォルトの名無しさん (アウアウウー Sad3-ci0b)垢版2022/06/29(水) 13:48:20.01ID:Es0nfTu8a
記者がアホなんやで
0790デフォルトの名無しさん (ワッチョイ 3f4f-60CD)垢版2022/06/29(水) 14:59:30.13ID:0RCF24VI0
.Netでもひとつの壁と言われているラムダ式が
VBAどころかEXCELで使えるようになるのか。
胸熱だが脱落者も増えるだろうな。
0791デフォルトの名無しさん (ラクッペペ MM4f-OnVC)垢版2022/06/29(水) 15:07:56.16ID:Ajq9RLSRM
一般的な意味での高階関数は数学的な抽象概念としての話ではあるけど、プログラム言語としては第一級関数の実装のことを言う場合が多い
(C言語の関数ポインタのように擬似的に実現する方法もある)

高階関数
https://ja.wikipedia.org/wiki/%E9%AB%98%E9%9A%8E%E9%96%A2%E6%95%B0

第一級関数
https://ja.wikipedia.org/wiki/%E7%AC%AC%E4%B8%80%E7%B4%9A%E9%96%A2%E6%95%B0
0793デフォルトの名無しさん (ワッチョイ 3f4f-60CD)垢版2022/06/29(水) 17:35:51.56ID:0RCF24VI0
>>791
読んでてよく分からんかったけど
要はアセンブラでいうところのアドレスの間接参照とか
間接修飾とか言われているやつで
.NetではDelegate、VBAではCallByNameによるコールバックって理解でいい?
0795デフォルトの名無しさん (ラクッペペ MM4f-OnVC)垢版2022/06/29(水) 17:56:17.53ID:vfJ3sAv3M
Excelで例えるなら関数を特定のオブジェクトのメソッドとしてではなく、それ自体を実体のあるオブジェクト(あるいはコレクション)と見做すようなもの
利用側の関数内で関数オブジェクト(のようなもの)を参照する手段として関数そのものをラムダとして扱う
0802デフォルトの名無しさん (ワッチョイ 4fda-hyng)垢版2022/06/29(水) 22:13:03.71ID:sZpGYWcf0
>>800
特定のオブジェクトやクラスに所属する関数やAPIなどシステムで定義された関数(メソッド)であればコールバック関数で参照することはできる
グローバルのユーザー定義の関数はラムダ式で記述するなどの手段を使わない限りは無理
0804デフォルトの名無しさん (JP 0Ha3-tCSL)垢版2022/06/29(水) 22:55:30.76ID:zPLPBKg6H
コールバック関数は何を指しているのか
なぜラムダ式が存在するのか
即時関数とラムダはどこから分岐していったのか
関数プログラミングは本当に有益なのか
本当に変数は悪者で動的型付けは悪なのか
それらはもはや哲学なのかもしれません
0807デフォルトの名無しさん (ワッチョイ 3f4f-60CD)垢版2022/06/30(木) 05:47:49.15ID:P7B/AZjs0
まぁでもあんまりVBAでコールバック使う機会ないかな
呼び出しや生成元のモジュール側の関数を
呼び出された側や生成された側から呼び出すときに
密結合になるのを避けるためくらいにしか使ってない
0808デフォルトの名無しさん (JP 0Ha3-tCSL)垢版2022/06/30(木) 07:16:43.81ID:1TbRNwlJH
>>807
エクセルVBAでDBのデータやファイルデータを読み込むとき
非同期にならないように処理するってことなんでしょうか?
例えばフラグを立ててdo-while、breakで処理待ちしてから次の処理に進むとか?
webのように処理と表示のタイムラグを気にするようなことがないのかもしれませんね
0813デフォルトの名無しさん (JP 0Ha3-tCSL)垢版2022/06/30(木) 08:04:39.54ID:1TbRNwlJH
え、昨夜のレスでは非同期使えるって言われたので
多言語と同じようにpromise的な処理があるのかと思いました
非同期めちゃくちゃ面倒ってことは
エクセル処理で非同期を使うという発想が間違っているのですね

なんかいろいろ勘違いしていたみたいでした
神様、先輩方、すみませんでした
0816デフォルトの名無しさん (ワッチョイ 3f4f-60CD)垢版2022/06/30(木) 10:09:22.67ID:P7B/AZjs0
>>815
え、マジ?
もう企業や教育者向けのじゃなくても開発出来るの?
0818デフォルトの名無しさん (アウアウウー Sad3-sbT5)垢版2022/06/30(木) 11:24:18.66ID:l3rHcZB/a
排他処理なにそれおいしいの?

ファイル保存したらマクロが止まるのは仕様
0819デフォルトの名無しさん (スップ Sd5f-oz1A)垢版2022/06/30(木) 15:49:46.55ID:RZ5lqdEjd
VBAいじっている間にいつの間にかボタン表面が白くなって
userformの背景色や、userformで使われているボタン表面のも同じ白色に変色
まったく新しくファイルを作っても同じ現象が起きる
オフィスをインストールし直しても同じ

例外的にいつもの正常なボタンの表面色で表示されるケースがある
https://i.imgur.com/t5RFNKa.png
この現象が起きる前に作ったファイルのコピーを作る。このコピーを開く。
このとき、セキュリティ警告が出てる間はなぜか正常なボタン表面色
コンテンツ~のボタンを押した瞬間にボタンが白くなる
Workbook_Openとかはそもそもない

今のおかしな状態が黒線の左側で、右側がセキュリティ警告が出ている状態

VBEでUserForm自体・ボタン・テキストボックス、これらの背景色BackColorの値は
&H8000000F&
これって正常な値ですよね?
つまり内部的には正常な値なのに表示はいずれも真っ白

windowsやモニタの設定の影響であればセキュリティ警告が出てようが無関係に白色化しているはず


何か原因わかる方いますか?
そもそもVBAが関係しているかどうかも分からないのですが。
ちなみに他のエクセルとは無関係のソフトウェアの色は特に変化はないように思います
0820デフォルトの名無しさん (スップ Sd5f-oz1A)垢版2022/06/30(木) 15:56:36.78ID:RZ5lqdEjd
>>819ですが、文章ちょっとおかしなところがありました
ユーザーフォーム上のボタンも、ワークシートに直接おくボタンも同じように白色になっているということです
そもそもボタンだけじゃなくて&H8000000F&で色が表示されている部分は
どれもおかしくなっているような状態です
0826デフォルトの名無しさん (JP 0Ha3-tCSL)垢版2022/06/30(木) 21:06:49.66ID:1TbRNwlJH
>>823
そうですね
コールバックがマルチスレッドって言ってるわけでも
プロセスを分けるって言ってるわけでもないです
全ての非同期処理は並列処理でもないですし
コールバックは処理なので、非同期でもないですし
VBAは初めてなのでいろいろ勉強していきます
なんか変なこと言っていたらごめんなさい
0827デフォルトの名無しさん (スッップ Sd5f-gXkX)垢版2022/06/30(木) 22:28:19.76ID:SUgmTyTCd
自分はやりたい事の手段の一つにExcelVBAがあるだけでExcelVBAでどこまでできるかってのは気にしてない
別の言語を選択すれば可能ならExcelVBAにこだわることもないしね
勉強するあたりのレベルならExcelVBAだけでなくほかの言語も勉強したほうがいいかもね
0828デフォルトの名無しさん (JP 0Ha3-tCSL)垢版2022/06/30(木) 23:19:39.52ID:1TbRNwlJH
エクセルの参加人数はすごいと思います
参加人数の多いエクセルをプラットフォームとしてデータ処理できるVBAは
他の言語には見られない参加者人数の価値があります(これを英語で何と言ったか忘れましたが)
ハードもプラットフォームも、潜在的な参加者の数で価値を測るという考え方が正しければ
エクセルVBAは他の言語をはるかに凌ぐ学習価値があると思うのです

他の言語を学習しつつもVBAも使えるというのは
とても素晴らしいことなのだと、VBA初学者としても感じています
先生方、これからもご指導いただける機会がありましたらよろしくです
0829デフォルトの名無しさん (スプッッ Sddf-319G)垢版2022/07/01(金) 00:44:30.82ID:iVoRsqHDd
>>828
お前は二度と来なくていいよ
0831デフォルトの名無しさん (ブーイモ MM4f-r+Rc)垢版2022/07/01(金) 01:26:43.65ID:miA2ycF9M
魔界に転生するとしたら、リザレクの次くらいに持っていたいスキルですもんね。
転生するまでに習得したいと思います。
0832デフォルトの名無しさん (ワッチョイ 4fc7-tCSL)垢版2022/07/01(金) 01:41:24.35ID:wxGP1WcO0
シート上に実行ボタンがあり、いろいろなBookから値を取得してメインのブックに張り付けるマクロがあるのですが、
Windows7+Excel2010とWindows10+Excel2016では、2016方が数倍動作が遅いです(数秒程度が10秒程度になる)。
ただし、時々2010と同程度で終わることがあり、原因がよくわかりません。
なんか、実行ボタンの押し方によって(クリックしてマウスポインタをすぐExcelのウィンドウ外に移動)、
速度が速くなるような気がしているのですが、そのようなことはあるのでしょうか?
あるとすれば、なにか対策や原因はあるのでしょうか?
0833デフォルトの名無しさん (スフッ Sd5f-tCSL)垢版2022/07/01(金) 02:14:42.23ID:u7q4KnhWd
>>832
2013あたりからExcelの内部構造が大幅に変わったらしい
Windowsも新しいほど重くなってる

マウスポインタの位置によって速度が変わるのは多いにあり得る
昔はボタンを押したままにするとアプリの動作が止まってたのが、いつのまにかずっと動き続けるようになったし
0834デフォルトの名無しさん (JP 0Ha3-tCSL)垢版2022/07/01(金) 06:59:23.11ID:JTFoUJU2H
>>829
DBシステムとしては
操作のバリエーション、検索、演算エンジンともに
最高峰の素晴らしい言語システムなのに
初心者に冷たいコミュニティなのですね

>>830
ネットワーク経済性と似た発想の価値測定方法で
ソフトやハードの経済価値を推定する思考方法です
0835デフォルトの名無しさん (ワッチョイ 3f4f-60CD)垢版2022/07/01(金) 07:51:36.56ID:m7rasyZv0
>>834
いやいや、DBシステムとして使うとすると
シートにSQL投げようとしたとき
インデックス貼れない時点で欠陥品だよ。

EXCELの本分はあくまで表計算。
0837デフォルトの名無しさん (ブーイモ MM4f-2lfq)垢版2022/07/01(金) 09:01:55.38ID:2BH0SskNM
今どき簡易DBアプリはPowerAppsみたいなローコードツールを使えばよい
オンライン共有のAccessみたいなアプリがクソ簡単に作れてExcelやスプレッドシートとの連携も容易
0838デフォルトの名無しさん (アウアウウー Sad3-n9/C)垢版2022/07/01(金) 11:26:48.78ID:MWfPFNZsa
>>832
気のせいだからほっとけ
0839デフォルトの名無しさん (スップ Sddf-gXkX)垢版2022/07/01(金) 11:27:33.06ID:B1H2Mtvqd
自分としては質問があればそれにこたえるだけでいいと思うが
技術者が他の事にも手を広げるならクソ簡単かもしれないが
一般ユーザーが背伸びしてVBAを理解しようとしてるなら保守なんかも含めてハードル高いと思うんだよね
まあ言いたい人は好き勝手に言うだけだから止められないが
0840デフォルトの名無しさん (ラクッペペ MM4f-vdZT)垢版2022/07/01(金) 11:46:09.70ID:Kpd5ohp2M
自分としては質問があれば質問するだけでいいと思うが
一般ユーザーが背伸びして回答なんかハードル高いと思うんだよね
まあ言いたい人は好き勝手に言うだけだから止められないが
0843デフォルトの名無しさん (アウアウウー Sad3-sbT5)垢版2022/07/01(金) 15:50:37.55ID:E3WEdYada
背伸び?逆やろ
背伸びしようとするタイプはVBAなんて使わない
伸びない香具師がVBAに固執してる
0844デフォルトの名無しさん (ブーイモ MMb3-tCSL)垢版2022/07/01(金) 15:51:42.30ID:S5EpTQdXM

「いいですか?1回しか言いませんからよく聞いてくださいね」
って言われたけど、なんで大事なことなのに1回しか言わないんだろう
そんなに大事なら確実に伝わるまで何回でも言うか書いて渡すかすべきだろ
0850デフォルトの名無しさん (ワッチョイ 0f93-+tXk)垢版2022/07/01(金) 17:57:54.04ID:Dqsnfi220
>>848
そういう奴でも同じ事何回か教えりゃ覚えるから、
分かんなかったらいくらでもまた聞けって言ってる
目的は教育コストの削減とかそいつの成長とかじゃなく仕事の完了な訳だから
0854デフォルトの名無しさん (ワッチョイ 3f4f-60CD)垢版2022/07/01(金) 19:41:46.04ID:m7rasyZv0
>>852
そもそも昭和の時代にEXCELあったっけ?
あの頃ってロータス123とか
マルチプランの時代じゃないの?
0858デフォルトの名無しさん (ワッチョイ 3f01-DrrO)垢版2022/07/01(金) 20:32:48.53ID:B9UYAOsl0
>>854
最初の日本語版は1989年(平成元年)リリースだから日本語版を使ってた人は居ないはず
最初のExcelはMac用に1985年(昭和60年)にリリースされてるみたいだからもしかしたら触った人がいるかもしれない
0860デフォルトの名無しさん (ワッチョイ ff90-gXkX)垢版2022/07/01(金) 21:05:26.47ID:0+5KhUlf0
vbエディターを開いたときに開いているブックのモジュールやらUFやらがバーっと開くのを止めさせたいんですが、どなたかご存じないですか?毎回重ねて並べて閉じるのがめんどい。
0862デフォルトの名無しさん (ワッチョイ 3f3d-9oGY)垢版2022/07/01(金) 21:42:37.97ID:kFE+Jjo70
マルチプランならあるな。
と言っても平成のはじめだけど。
あの時代はPC買うとおまけで違法コピーモノがもらえる時代だからな、
マルチプランも123も両方あったわ。
当時は123のほうが強かったんだよね。
Excelとマルチプランて名前が変わっただけじゃないの?
0864デフォルトの名無しさん (ブーイモ MMb6-K8/U)垢版2022/07/02(土) 00:35:50.92ID:eLIQ72LUM
Collectionについての質問なのですが
Collectionの要素をソートする場合
それ用のSubを作って、その中でソート後のCollection変数を作ってその中に順番に要素を1つ1つ入れていって最後に
set 元のcollection=新collection
とやる方法を考えつきました。

この方法で問題ないですか?それとももっとスマートな方法がありますか?
0865デフォルトの名無しさん (ワッチョイ 87da-3xOz)垢版2022/07/02(土) 00:50:08.19ID:vnn63W/20
懐かしいの。
当時 IBM 5550とかいうパソコン使ってた記憶がうっすらある
そこでマルチプラン動かしてた
ところが海外拠点ではロータス123 の方が評判でどこかでそれに切り替えた記憶がある。同時に IBM 55505何かに変更したような記憶があるな

マック使ってたやつが Excel を自慢して確かに羨ましかったな
DOS V パソコンで Windows 3.1が動いてその上で Excel が動いた時は感激したな
0869デフォルトの名無しさん (ワッチョイ 8a4f-iquj)垢版2022/07/02(土) 06:04:41.51ID:kG8DYDgz0
>>864
良いんじゃない?それで。
用途にもよるけどコレクションにキーくっつけといて
別にキー一覧みたいのをソートして作っといて
そのキーからソートした順番に引っ張るっていう方法もあるけど。
0870デフォルトの名無しさん (ブーイモ MMb6-K8/U)垢版2022/07/02(土) 06:14:46.63ID:v1xY47GsM
>>869
あれれそうですか。
キーの方法も良さそうですね。

でもこんなひとはよく使用しそうなのに話が盛り上がらないのは
みんなのVBAのスキルが低レベルだからでしょうか?
0871デフォルトの名無しさん (ブーイモ MMb6-K8/U)垢版2022/07/02(土) 06:15:13.26ID:v1xY47GsM
x こんなひと
o こんなこと
0874デフォルトの名無しさん (ワッチョイ 8a4f-iquj)垢版2022/07/02(土) 06:52:10.92ID:kG8DYDgz0
>>870
なるほど、ただの煽りかも知れないけど
あまり人前でそう言うことは言わない方がいい。

人を嫌な気分にさせるし
自惚れ屋と思われて周りからも疎まれることになる。
自分の為にも思ったことは口にしたり書き込んだりする前に一度考えてから実行する方が良いよ。
0875デフォルトの名無しさん (エアペラ SD13-qRYS)垢版2022/07/02(土) 07:31:29.49ID:LyZZMtStD
>>870
当たり前の処理のどこに盛り上がる要素があると思うのか
そもそもソートが必要なものにcollection(リスト)使おうって時点で
データ構造の選択を間違ってる可能性が大きい
0876デフォルトの名無しさん (ブーイモ MMb6-K8/U)垢版2022/07/02(土) 07:35:58.08ID:+UfCFyJWM
わかった
じゃあいい
0878デフォルトの名無しさん (ブーイモ MMb6-K8/U)垢版2022/07/02(土) 07:40:07.80ID:+UfCFyJWM
For-Next文の中だけで使う局所ローカル変数を定義する場合は
そのFor-Nextブロック内で
Dim a as String
でいいんですっけ?
それともモジュールの先頭で?

たしかVBAでは局所ローカル変数の概念がなくて
Sub/Function内すべての場所で使える気がするのだけど。
0879デフォルトの名無しさん (ワッチョイ 8a4f-iquj)垢版2022/07/02(土) 07:49:38.67ID:kG8DYDgz0
>>878
局所ローカルという呼び方をするのかは兎も角
関数やメソッド以下のスコープ変数は基本的には設定出来ない。

変数宣言をする場所についてはVBAに限らず
そのスコープが始まる頭のところに書くのが一般的だよね。
ただ、言ってる通り別に先頭に書かなくても問題なく実装は出来る。
0880デフォルトの名無しさん (ブーイモ MMc6-SrHA)垢版2022/07/02(土) 07:49:48.13ID:vz70zrJPM
>>870
盛り上がったじゃないか
良かったな
0881デフォルトの名無しさん (エアペラ SD13-Omw7)垢版2022/07/02(土) 07:49:50.15ID:LyZZMtStD
>>878
言うとおり局所ローカル変数は存在しないのでFunctionやSubの中ならどこでもいいよ
モジュール先頭(Function、Subの外側)だとグローバル変数かパブリック変数になるからその目的ならダメ
0882デフォルトの名無しさん (ブーイモ MMb6-K8/U)垢版2022/07/02(土) 07:58:43.11ID:+UfCFyJWM
>>879
>>881
なるほどありがとうございます。
やっぱりできないのですね。

でもSub/Function先頭に書くと可読性が著しく下がる(この意味が分からない人はスキル低すぎ)のでやめときます。
われわれのように複雑なプログラミングをしてる人にとってはVBAの言語はいろいろ不便に感じますね。
0883デフォルトの名無しさん (ワッチョイ 8a4f-iquj)垢版2022/07/02(土) 08:01:20.13ID:kG8DYDgz0
>>882
だからそう言った言い方はやめた方がよいかと。
モロに自分が「単一責任原則も知らずにスパゲッティコード組みます」と言ってるようなものだから。
0888デフォルトの名無しさん (アウウィフ FFcf-9ZeA)垢版2022/07/02(土) 09:55:37.37ID:COZLaCzbF
局部もろ観え
0893デフォルトの名無しさん (ワッチョイ 87da-3xOz)垢版2022/07/02(土) 16:46:05.89ID:vnn63W/20
>>891
普通の文と同じように実行されるわけはないと思ったんで疑問形で書いたんだけど

でもどういう法則があるのかよくわからんから質問したの

宣言文と実行文で検索しても参考になる記事はなかった

教えてくれませんか?
0903デフォルトの名無しさん (ワッチョイ 27ce-auNL)垢版2022/07/03(日) 21:53:26.02ID:+uLGaU5J0
【VBA エキスパート】 Excel / Access https://kizuna.5ch.net/test/read.cgi/lic/1640108986/
素人にVBA仕込んだ https://medaka.5ch.net/test/read.cgi/prog/1642131517/
VBAのフリーランスエンジニアは需要ありますか? https://medaka.5ch.net/test/read.cgi/prog/1598637098/
Excel VBA 質問スレ Part76 https://mevius.5ch.net/test/read.cgi/tech/1651339421/
VBAなんでも質問スレ Part3 https://mevius.5ch.net/test/read.cgi/tech/1631184381/
Access VBA 質問スレ Part2 https://mevius.5ch.net/test/read.cgi/tech/1544620479/
★今VBAを勉強してるんだが★ https://medaka.5ch.net/test/read.cgi/php/1214626617/
0905デフォルトの名無しさん (スプッッ Sdaa-CsJ7)垢版2022/07/04(月) 13:01:53.71ID:OO2ZWbG3d
>>904
それ、しつこくForがどうのと聞いていた例のあいつだから
0906デフォルトの名無しさん (ワッチョイ 73da-XUZM)垢版2022/07/04(月) 16:21:37.95ID:vF9E34H30
>われわれのように

うん。われわれって誰?
脳内でしょ恐らく

ふつーよ、自分から複雑な事やっていますアピールとかするかぁ??
もしかして釣られているのか俺ら
0907デフォルトの名無しさん (スプッッ Sd4a-BAMd)垢版2022/07/04(月) 16:28:28.96ID:g5E8ZW1ad
決まった様式のExcelファイルがあって、それを見やすく加工するマクロを組んで自信で使ってた際に、それを部内に展開したいってなった場合どう配布するのが正解なんだろう。
使う人はマクロの知識は全くないものとして。

1.xlamにして配布
アドインの設定をしてあげる必要がある。
使用頻度の低い人にアドインを入れるメリットが薄い。

2.マクロだけ入れたxlsmを配布
加工したいxlsxファイルと同時に開いてもらってマクロを実行してもらう。
手間が増える。

3.VBSに書き換えて配布
書き換えが面倒。

4.VBSとxlsmを配布してVBS実行でxlsm起動とマクロ実行
処理に時間がかかりそう。

使用頻度の高くないマクロをアドインとして登録するのは起動時間のロスになりそうだから避けたいんだけど、他の人に特定のマクロを手軽に実行させるのはどういう方法がいいだろうか?
0908デフォルトの名無しさん (ワッチョイ 035f-auNL)垢版2022/07/04(月) 17:17:05.04ID:CvyJwule0
>>907
> 2.マクロだけ入れたxlsmを配布
> 加工したいxlsxファイルと同時に開いてもらってマクロを実行してもらう。
> 手間が増える。

これでいい。手間って配布の手間のこと?
共有サーバーのどっか特定の場所に読み取り専用にしたxlsmファイル置いといて
ここのマクロファイル使って作業してくれって告知だけすればいい
不具合が見つかって修正した場合も同名ファイルで上書きするだけだから楽だと思うよ
0911デフォルトの名無しさん (スプッッ Sd4a-BAMd)垢版2022/07/04(月) 19:05:52.33ID:g5E8ZW1ad
>>908
Excelファイル2つ開いてマクロ実行して閉じるっていうのが操作的に手間かなと思ったけど、共有フォルダに置いといてそれを開いて使ってもらうのは無難に使いやすそう。ありがとう。

後出しで申し訳ないんだけど、うちの会社のPCがウイルス対策だとかで毎日起動時にマクロ有効化設定を強制オフ(有効化メッセージ出ずにオフになるやつ)にされるせいで、トラストセンターから毎日有効化設定してね、っていう雑な仕組みになってるんだ。
自身は設定オンにするVBSなりbatで対応してるけど、他の人だとExcel開いてトラストセンターで設定変更の事前動作も必要に。

アドインやVBSなら有効化しなくても動作するんだけど、そうなるとドラッグドロップで動作するVBSだと使う側の手間は省けるだろうか。
0912デフォルトの名無しさん (スフッ Sdaa-A+Eo)垢版2022/07/04(月) 19:58:33.04ID:Ujf5qvvVd
1. xlsmを共有フォルダに保存
2. 読み取り専用で開く
3. xlsm上の別シートに出力結果をVBAで作成
4. 出力結果シートを新規ブックにVBAで移動 (ws.move)
5. 新規ブックをダイアログボックスで保存させる


毎回これでやってる
0913デフォルトの名無しさん (ワッチョイ 035f-auNL)垢版2022/07/04(月) 22:40:20.14ID:CvyJwule0
>>911
この環境下でも
(セキュリティを無効化して対象のxlsmを開く)VBSなりbatファイルの実体を共有に置いて
そのショートカットだけを配布がベストだと思う

> ドラッグドロップで動作するVBSだと使う側の手間は省けるだろうか
組織内のユーザーのリテラシーにもよるけど、
xlsmでもWorkbook_Openで即ファイルピックアップダイアログ開かせれば大差ないし、
なにより保守がしんどいでしょ

もし複雑な加工内容への変更依頼がきたら?
あるいは今後別のマクロの作成依頼が来て、それもすべてVBSで配布しろと言われるかもしれない

VBEもIDEとしてはアレだけど、
ブレークポイント置けないDebug系メソッドないモジュール分割気軽にできないVBSで開発し続けるの何倍も大変だと思うよ
0915デフォルトの名無しさん (ワッチョイ 732c-PmjZ)垢版2022/07/05(火) 07:41:15.60ID:HXH2KDmV0
>>907
VBSを配布して、そこに処理対象ファイルをドラッグドロップしてもらうのが、ユーザ側としては1操作で完結して使いやすいと思う
ユーザに慣れない操作を押し付けて手間を増やしたら本末転倒だしね

ところで「加工」て何するの?
大部分が編集不可の共有ひな型ブックならともかく、人間が好き勝手にいじったブック中から「加工」対象を特定するのは大変だろ
0917デフォルトの名無しさん (スプッッ Sd33-BAMd)垢版2022/07/05(火) 09:04:16.75ID:MtIzSAoXd
>>915
加工についても恥ずかしながら前スレで相談させてもらって一応解決することができました。
・web上からDL出来る名簿がpdf
・pdfをacrobatでexcel変換するとセル位置や結合が不揃い
・目的は名簿データをそれぞれ横一列のデータにしたい

vbaにて処理は出来るようになったけど、他の人が使いたいという意見があり、今回配布手段についてご相談させてもらった次第です。
https://i.imgur.com/XgHnIpg.png
https://i.imgur.com/cXouZTg.png
0919デフォルトの名無しさん (ワッチョイ 8aad-QBhF)垢版2022/07/05(火) 11:30:39.29ID:X6XwWL+o0
最近、Alt+F11でVBEを開くと、アドインのコードが表示されるようになったんだけど、
仕様が変わったのか、表示されるような設定にしてしまったのか。。
皆さんは表示されますか?
0920デフォルトの名無しさん (アウアウウー Sacf-gU6j)垢版2022/07/05(火) 11:43:19.49ID:QxOevurCa
上の人間の指示通りにするので悩まない
0923デフォルトの名無しさん (ワッチョイ 732c-PmjZ)垢版2022/07/05(火) 12:47:27.21ID:HXH2KDmV0
>>917
成程。流れ見てないけど、ここにマトモに助けてくれる人がいるというのは意外(失礼w)
acrobatによるpdfのexcel変換過程で色んな気まぐれ要素によりフォーマットが乱れそうな予感がするが、それを吸収するコーディング努力の継続こそスキル上達の早道
頑張って下さい
0927デフォルトの名無しさん (ワッチョイ fa3d-we7L)垢版2022/07/06(水) 21:31:49.12ID:RzEtlOC+0
VBAxSeleniumでchromeはオプション設定が出来るけどedgeは出来ないと思ってたんだが、出来るんだな。
ネットでもうまくいかないていう情報が多い。

Chromeの場合
Driver.AddArgument ("user-data-dir=" & fso.BuildPath(CurrentDirectory, "chrome_vba"))

Edgeの場合
driver.SetCapability "ms:edgeOptions", "{""args"": [""user-data-dir=" & Replace(fso.BuildPath(CurrentDirectory, "edge_vba"), "\", "\\") & """" & _
"] }"

まあjsonで渡してるんだが、VBAてjsonてこんな風にデータベタ打ちしか方法がない?
0932デフォルトの名無しさん (ワッチョイ cd5f-3+7c)垢版2022/07/11(月) 01:40:13.99ID:vt1vW9IA0
インターネット経由がどうたらというのは、古いマイクロソフトと新しいマイクロソフトの内部抗争にすぎない。
0934デフォルトの名無しさん (ワッチョイ cd5f-3+7c)垢版2022/07/11(月) 04:31:29.20ID:vt1vW9IA0
ビルゲイツ派はAzue妨害派だろうな
0937デフォルトの名無しさん (ワッチョイ 03bd-TxaV)垢版2022/07/13(水) 15:11:11.33ID:cdOR/i1g0
客先から毎日送られてくるpdfに対し、特定の部分だけを抜いてexcelに出すというものを作りたいです

流れとしてはwordで開いてコピペ→そこから必要な部分だけ整形
という流れで考えており概ねできたのですが、pdfをwordに落とした時に文章がそのまま文章でコピーされる時と1行ずつテキストボックスやら画像やらでコピーされる時がありうまく実用化出来ません

上記か、あるいはその他の方法でも良いので安定的にコピーする方法は無いでしょうか?

ちなみにpdfは定型フォーマットに記載された日報のような形式で、手動なら文字はそのままコピペできます、フォーマットはいつも同じですが中の文章は行数が日により異なります
0938デフォルトの名無しさん (ワッチョイ cb8e-iSZE)垢版2022/07/13(水) 17:04:46.28ID:+TgcJMJe0
>>937
客先にテキストでもくれと依頼すればいいだろ
0939デフォルトの名無しさん (アウアウウー Sa09-2HoA)垢版2022/07/13(水) 17:32:17.47ID:H0DndFW/a
pdfを書き換えたい訳じゃなくて中身を読みたいだけなら
pdfreaderを使うのが一番楽
0940デフォルトの名無しさん (ワッチョイ fdce-TkQT)垢版2022/07/13(水) 18:07:17.76ID:jvbf7mTW0
PDFは人間のため、印刷のために開発された仕組み
データの順番がどんだけ変わっても人間の目には同じに見えるようになってるから、中身をプログラムで自動的に取り出すのには向いてない

厳密には不可能じゃないとしても、ものすごく大変
できるだけ別の方法を考えた方がいい
0941デフォルトの名無しさん (スッップ Sd43-jJDy)垢版2022/07/13(水) 18:39:04.67ID:tqig4XWpd
そのPDFが紙からスキャンしたものじゃなく文字データとして残ってるなら、ワード経由しなくてもacrobatreaderで開いてコピペするのが早いとは思う。

PDFをExcelに変換する手段があるなら、変換してマクロで必要な所を抽出できそうだけど元ファイル次第では難しいか?
0945デフォルトの名無しさん (ワッチョイ fdce-TkQT)垢版2022/07/13(水) 19:51:06.77ID:jvbf7mTW0
>>943
中身はテキストなんだけど、データの順番が入れ替わっても同じ見た目の文書が再現できる
だから人間から見て正しい順序で取り出すのが大変
いっぺん出力してOCRした方が早いぐらい
0947デフォルトの名無しさん (ワッチョイ cb8e-iSZE)垢版2022/07/13(水) 20:29:35.01ID:+TgcJMJe0
>>943
馬鹿なら黙っていればいいのに
htmlじゃねーよ
0949デフォルトの名無しさん (ワッチョイ cb8e-iSZE)垢版2022/07/13(水) 20:40:59.71ID:+TgcJMJe0
>>948
マークアップじゃないし
馬鹿は黙っていればいいのに
0951デフォルトの名無しさん (ワッチョイ 355f-TkQT)垢版2022/07/13(水) 21:36:26.72ID:bpgpUpce0
バイナリファイルをマークアップされてるって表現する人はじめてみた
0955デフォルトの名無しさん (スプッッ Sd03-PZPQ)垢版2022/07/14(木) 07:26:28.96ID:5ehEa+FTd
技術力だけで生きていくか、コミュ力も高めて生きていくかの「差」が今回の質問で明らかになったね

今回の場合、コミュ力あるやつならとっくに客先はpdfとは別にcsvとかテキストファイルを送る方向で動いてるよ

俺はコミュ力を高めていく
お前らは今後も無理難題をひたすら解決する技術力を高めていけw
0959デフォルトの名無しさん (スッップ Sd43-jJDy)垢版2022/07/14(木) 08:14:11.08ID:YsqOWTP3d
根本解決を目指すアドバイスはいいけど、どんなデータかも質問者と客先の状況も分からないのに、データ貰えば解決(ドャァは乱暴じゃない?

少なくともwordで開いても文字認識がまばらだったりするって時点で、綺麗な様式から出力したデータじゃないのは確かだし、質問者がそういう回答を求めてないとは思わない?
0963デフォルトの名無しさん (アウアウウー Sa09-2HoA)垢版2022/07/14(木) 10:19:52.64ID:dxotV0yqa
>>947
++
>>949
++
>>951
ほんそれ
0964デフォルトの名無しさん (スッププ Sd43-CglE)垢版2022/07/14(木) 21:34:12.70ID:L5ignm6zd
A列のセルに列挙された複数単語の商品名から重複した単語のみを除くことは可能でしょうか?

A
1 RED BLUE APPLE
2 RED BLUE BANANA
3 RED BLUE GREEN ORANGE
4 RED BLUE YELLOW WHITE GRAPE
5 RED BLUE WHITE CHERRY

↑これらのデータを↓のように整形したいです。

B
1 APPLE
2 BANANA
3 GREEN ORANGE
4 YELLOW GRAPE
5 CHERRY

「RED BLUE APPLE」は同一セル内にスペースで区切られて入力されています。
データ量は1回あたり100行程度になります。セル内の単語、単語の数は毎回異なります。

ご教示いただけますと幸いです。よろしくお願いいたします。
0965デフォルトの名無しさん (ワッチョイ 1baa-2HoA)垢版2022/07/14(木) 21:34:41.90ID:TfuP8Uyl0
6進数?を通常の時刻表記に直す方法教えてください。
例)1.3→1:30
  2.45→2:45
0968デフォルトの名無しさん (スプッッ Sd43-iSZE)垢版2022/07/14(木) 21:44:41.57ID:zzetjp0td
>>964
可能です。
はい、次。
0970デフォルトの名無しさん (スッップ Sd43-jVDF)垢版2022/07/14(木) 23:23:30.65ID:BkEIWbQgd
>>964
自分ならだけどこんな感じかと Mainのループは最大行数を取得してくれ _をスペースに置き換えてくれ
Sub_Main()
____Dim_i_As_Long
____For_i_=_1_To_5
________Dim_a_As_String
________a_=_Cells(i,_1).Value
________Dim_j_As_Long
________For_j_=_1_To_5
____________If_i_<>_j_Then
________________a_=_CutWord(a,_Cells(j,_1).Value)
____________End_If
________Next
________Cells(i,_2).Value_=_a
____Next
End_Sub
0971デフォルトの名無しさん (スッップ Sd43-jVDF)垢版2022/07/14(木) 23:23:50.53ID:BkEIWbQgd
Function_CutWord(a_As_String,_b_As_String)_As_String
____Dim_aa()_As_String
____aa_=_Split(a,_"_")
____Dim_bb()_As_String
____bb_=_Split(b,_"_")
____Dim_c_As_String
____c_=_""
____Dim_i_As_Long
____For_i_=_LBound(aa)_To_UBound(aa)
________Dim_j_As_Long
________For_j_=_LBound(bb)_To_UBound(bb)
____________If_aa(i)_=_bb(j)_Then
________________Exit_For
____________End_If
________Next
________If_j_>_UBound(bb)_Then
____________If_c_<>_""_Then
________________c_=_c_&_"_"
____________End_If
____________c_=_c_&_aa(i)
________End_If
____Next
____CutWord_=_c
End_Function
0976デフォルトの名無しさん (スプッッ Sd43-iSZE)垢版2022/07/15(金) 00:48:33.55ID:kd+ZBNkRd
いや、そもそも自作自演だろ
0977デフォルトの名無しさん (ワッチョイ fdce-TkQT)垢版2022/07/15(金) 01:18:26.31ID:mFCZ39Ni0
Sub Main()
  Dim a As String
  Dim i As Long
  Dim j As Long
  For i = 1 To 5
    a = Cells(i, 1)
    For j = 1 To 5
      If i <> j Then a = CutWord(a, Cells(j, 1))
    Next
    Cells(i, 2) = a
  Next
End Sub

Function CutWord(a As String, b As String) As String
  Dim aa() As String
  Dim bb() As String
  Dim c As String
  Dim i As Long
  aa = Split(a, " ")
  bb = Split(b, " ")
  For i = LBound(aa) To UBound(aa)
    Dim j As Long
    For j = LBound(bb) To UBound(bb)
      If aa(i) = bb(j) Then Exit For
    Next
    If j > UBound(bb) Then
      If c <> "" Then c = c & " "
      c = c & aa(i)
    End If
  Next
  CutWord = c
End Function
0978964 (スッップ Sd43-CglE)垢版2022/07/15(金) 02:31:06.28ID:bSLom3XEd
早速ご回答いただいた皆様、ありがとうございました!
ほぼ思い通りの結果を得ることができました。

ちなみにですが、
例えばA6に「DOG CAT RABBIT COW BEAR」というデータがある場合、
各単語がどれとも重複していないため「DOG CAT RABBIT COW BEAR」そのまま5単語が残ります。

各データのユニークな単語を最小数で残すことは可能でしょうか?
下記のような形です。

A
1 RED BLUE APPLE
2 RED BLUE BANANA
3 RED BLUE GREEN ORANGE
4 RED BLUE YELLOW WHITE GRAPE
5 RED BLUE WHITE CHERRY
6 DOG CAT RABBIT COW BEAR



B
1 APPLE
2 BANANA
3 GREEN ORANGE
4 YELLOW GRAPE
5 CHERRY
6 DOG

度々申し訳ございませんが、よろしくお願いいたします。
0979デフォルトの名無しさん (ワンミングク MMa3-p0Nn)垢版2022/07/15(金) 02:36:26.14ID:WFW52ORLM
いつものあいつだぞ
0981デフォルトの名無しさん (スフッ Sd43-TkQT)垢版2022/07/15(金) 07:03:30.04ID:ymO8mssad
Sub Main()
  Dim a As String
  Dim i As Long, j As Long
  Dim last As Long
  last = Cells(Rows.Count, 1).End(xlUp).Row
  For i = 1 To last
    a = Cells(i, 1)
    For j = 1 To last
      If i <> j Then a = CutWord(a, Cells(j, 1))
    Next j
    Cells(i, 2) = a
  Next i
End Sub

Function CutWord(a As String, b As String) As String
  Dim aa() As String
  Dim bb() As String
  Dim c As String
  Dim i As Long, j As Long
  aa = Split(a, " ")
  bb = Split(b, " ")
  For i = LBound(aa) To UBound(aa)
    For j = LBound(bb) To UBound(bb)
      If aa(i) = bb(j) Then Exit For
    Next j
    If j > UBound(bb) Then c = c & aa(i) & " "
  Next i
  CutWord = Trim(c)
End Function
0982デフォルトの名無しさん (スッププ Sd43-jVDF)垢版2022/07/15(金) 07:30:27.66ID:KClfAjojd
俺のコードをいじってくれてうれしいが
Valueとったり改行いじったりしてるだけで行数減らしてるだけなんて結局マイルールのこだわりを主張してるだけなんだよな
こんな方法あるぜってのが見たいわ

>>978
6が「DOG」になる最小数という意味が不明
先頭の単語を返すだけならCutWordの最後でaとcが同じ値になったらaa(LBound(aa))を返すようにすればいいのでは
0984デフォルトの名無しさん (アウアウウー Sa09-DHlW)垢版2022/07/15(金) 08:08:12.42ID:DqNyEc18a
>>964
複数回現れる単語を削除すればいいのか?
Sub X964()
Dim Sheet As Worksheet: Set Sheet = ...
Dim Dictionary As Object: Set Dictionary = CreateObject("Scripting.Dictionary")
Dim LastRow As Long: LastRow = SheetSheet.Cells(Rows.Count, "A").End(xlUp).Row
Dim Row As Long
For Row = 1 To LastRow
Dim Word As Variant
For Each Word In Split(Sheet.Cells(Row, "A").Value, " ")
If Dictionary.Exists(Word) Then
Dictionary(Word) = Dictionary(Word) + 1
Else
Dictionary.Add Word, 1
End If
Next
Next
For Row = 1 To LastRow
Dim Uniques As String: Uniques = ""
For Each Word In Split(Sheet.Cells(Row, "A").Value, " ")
If 1 < Dictionary(Word) Then
If Uniques = "" Then
Uniques = Word
Else
Uniques = Uniques & " " & Word
End If
End If
Next
Sheet.Cells(Row, "B").Value = Uniques
Next
End Sub
0987デフォルトの名無しさん (スフッ Sd43-TkQT)垢版2022/07/15(金) 09:42:45.28ID:D6klNH8hd
Sub sample3()
  Dim r As Long
  Dim z As Long '最終行
  Dim s As String '全データ
  Dim a() As String '単語リスト
  Dim i As Long
  z = Cells(Rows.Count, 1).End(xlUp).Row
  For r = 1 To z
    Cells(r, 2) = Cells(r, 1)
    s = s & Cells(r, 1) & " "
  Next r
  a = Split(s, " ")
  For i = LBound(a) To UBound(a)
    If Len(s) - Len(a(i)) > Len(Replace(s, a(i), "")) Then '2回以上出てくるか
      For r = 1 To z
        Cells(r, 2) = Trim(Replace(Cells(r, 2), a(i), "")) '各セルから削除
      Next r
    End If
  Next i
End Sub
0989デフォルトの名無しさん (スプッッ Sd43-iSZE)垢版2022/07/15(金) 13:22:47.81ID:kd+ZBNkRd
ここでRuby馬鹿がRubyではこうなるとか書くのは見えている
0993デフォルトの名無しさん (ワッチョイ 9d5f-GsVe)垢版2022/07/16(土) 07:52:34.81ID:1SMMBEmo0
UserForm1.Show vbModeless
Unload UserForm1

って意味なら、別に落ちなかったけど
0996デフォルトの名無しさん (ワッチョイ 762c-lpz1)垢版2022/07/16(土) 18:00:44.38ID:2WLM14wy0
>>978
Ruby で作った

require "csv"

input_str = <<"EOT"
RED,BLUE,APPLE
RED,BLUE,BANANA
RED,BLUE,GREEN,ORANGE
RED,BLUE,YELLOW,WHITE,GRAPE
RED,BLUE,WHITE,CHERRY
DOG,CAT,RABBIT,COW,BEAR
EOT

csv = CSV.new( input_str )
input_ary = csv.read # 2次元配列

# 各単語の出現回数を数える。Hash の初期値は、0
hash = input_ary.each_with_object( Hash.new( 0 ) ) { |row, hash|
row.each { |word| hash[ word ] += 1 }
}

# 出現回数が2以上の単語を削除する
input_ary.map! { |row|
row.delete_if { |word| hash[ word ] >= 2 }
row
}

# 2次元配列を、CSV 文字列に変換する
csv_str = input_ary.map( &:to_csv ).join
puts csv_str
10011001垢版Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 77日 2時間 26分 42秒
10021002垢版Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

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