X



Excel VBA 質問スレ Part73
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん (ワッチョイ 4668-xJJl)
垢版 |
2021/09/13(月) 07:29:59.47ID:GNx0xRRz0
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を2行貼り付けるナリ

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

※前スレ
Excel VBA 質問スレ Part70
https://mevius.5ch.net/test/read.cgi/tech/1616072923/
Excel VBA 質問スレ Part71
https://mevius.5ch.net/test/read.cgi/tech/1621914481/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
0003デフォルトの名無しさん (ワッチョイ a58e-tqgi)
垢版 |
2021/09/13(月) 19:11:08.29ID:Pa7+I2w50
いつものあいつの釣りとあまりに馬鹿過ぎる質問はお断りです
また、Excelの使い方すらわからない人はお帰りください
0005デフォルトの名無しさん (ワッチョイ e6bb-gYTk)
垢版 |
2021/09/14(火) 16:24:06.98ID:QWQM37es0
A列の全行のセルの値を配列に突っ込む時、オートフィルターが複数列でかかっていると、
表示されてるやつだけ配列に入ってしまうの、なんとかならない?

配列をA列に縦方向に貼り付ける時も、オートフィルターが既にかかってると、適切に元の行に貼り付け戻せない。
仕様なのかな
00065 (ワッチョイ e6bb-gYTk)
垢版 |
2021/09/14(火) 16:26:32.34ID:QWQM37es0
2万行あるから、なるべく最初にa列の内容を全部配列に入れてから、それぞれを操作して、
それからまた修正済みの配列の中身をa列に上書き貼り付けしたい。
でも、オートフィルターがかかっているとまずい。
複数列でオートフィルターがかかっているととても難しい
00085 (ワッチョイ e6bb-gYTk)
垢版 |
2021/09/14(火) 17:37:49.57ID:QWQM37es0
全解除して処理を行う、というのはできたけど、ユーザーのためにフィルタした状態ってのはそのままに戻したい。
フィルタしてる列が単体ならなんとかそれはできた。
だけど、複数列でフィルタした状態を、いったん全解除して、そんであとでまた元のフィルタ選択状態に戻すのが出来なさそうなのよね。
0010デフォルトの名無しさん (ワッチョイ 5e68-gxqX)
垢版 |
2021/09/14(火) 20:24:42.51ID:Tksl7xa90
フィルタは全解除するのが一番手っ取り早い
横に伸ばすのは異常に難易度高い
0011デフォルトの名無しさん (ワッチョイ 5e68-gxqX)
垢版 |
2021/09/14(火) 20:25:17.71ID:Tksl7xa90
列の増加が多いなら最初から大量にフィルタ列を用意シておいたほうが良い
0012デフォルトの名無しさん (アウアウウー Sa21-DZpR)
垢版 |
2021/09/14(火) 21:12:31.57ID:u7isybhPa
>>8
フィルタの条件って色々指定できる(色とか日付とか特定の文字列を含むとか)から、全部に対応しようとするとすごくめんどくさい
https://excel-ubara.com/vba_class/VBA_CLASS_08.html

割り切りとして「このマクロを使ったらフィルタは解除されますが情報は最新化されます」くらいにしとくのが無難かと
0014デフォルトの名無しさん (ワッチョイ 2a05-0MLo)
垢版 |
2021/09/14(火) 23:44:27.27ID:UJ1BwW9y0
コマンドボタンを押してユーザーフォームを開くときに、
TopとLeftの位置をセルC5のTopとLeftの位置に合わせるべく、
以下のようにコードを記述したのですがうまく合ってくれません。
※セルC5のLeftやTop位置より大分左や上に表示されてしまう。

何か記述的におかしいのでしょうか?

Sub UserFormOpenSet()
Dim varTop, varLeft
With Sheets("説明シート").Range("C5")
varTop = .Top
varLeft = .Left
End With
With UserForm
.Show
.Top = varTop
.Left = varLeft
.Label1.Caption = "コメント内容"
    ・


End With
End Sub
0016デフォルトの名無しさん (ワッチョイ 2a05-0MLo)
垢版 |
2021/09/15(水) 00:23:15.17ID:8Tg1g6H40
>>15
UserForm top left セルの位置 でググったら
完璧なTipsがありました!
検索のヒントをありがとうございました!
0017デフォルトの名無しさん (ワッチョイ 7990-xJJl)
垢版 |
2021/09/15(水) 00:48:53.61ID:YsJqQLCb0
どーでも良い質問なんだが、VBAからエクセルのセルに値を入れるときの表現について
意見が割れてるので、みんながどー表現してるか知りたい

例えばVBAで A1セルに 123 という値を入れるとき、
A1セルに 123 を出力するという表現を使うか、A1セルに 123 を入力するという表現を使うか、どっち?

仕様書で人によって同じことしてるのに出力となってたり入力となってたりで色々バラバラすぎる
0018デフォルトの名無しさん (スフッ Sd0a-dGLa)
垢版 |
2021/09/15(水) 01:03:00.63ID:gZeM1+Z6d
>>17
VBAで計算や処理した結果をワークシートに保存するだけ、セルに値を入れて終わりの場合は出力
シートに値をセットしたあと、さらにその値を使って数式やグラフなどで別の処理や加工をする場合は入力
0019デフォルトの名無しさん (ワッチョイ 5e68-gxqX)
垢版 |
2021/09/15(水) 07:18:17.38ID:zmLKkAKu0
>>17
それは一律で入力じゃないのか
代入って言うぐらいだし

「出力」はエクセルがrangeのvalueを出力してるだけでは?
0020デフォルトの名無しさん (ワッチョイ 39e6-oWuh)
垢版 |
2021/09/15(水) 07:51:35.00ID:qRxK7g6Y0
VBAの関数、メソッドとしてそのデータが入力値なのか出力値なのかは明白なのでは?
0022デフォルトの名無しさん (ブーイモ MM3e-Eik0)
垢版 |
2021/09/15(水) 12:02:19.64ID:K+waubxMM
お知恵をお貸し下さい

String型の変数に文章を代入しています
その変数が「は」を助詞として使用しているかを検出し、その「は」が何文字目に記載されているかを抽出したいです
判定式はどの様に組むのが良いでしょうか
0026デフォルトの名無しさん (テテンテンテン MM3e-h3Yj)
垢版 |
2021/09/15(水) 16:06:38.48ID:5d7y3fL1M
>>17
> A1セルに 123 を出力するという表現を使うか、A1セルに 123 を入力するという表現を使うか、どっち?
俺なら「A1セルに 123 を書き込む」かな
シートはストレージみたいなものなのと思ってるので出力とか入力って言うのはなんか違和感ある
0027デフォルトの名無しさん (ワッチョイ 3a2f-0MLo)
垢版 |
2021/09/15(水) 16:59:13.14ID:3TKYe9Fz0
VBA側を主体に書いているなら(シートに)出力
シート側を主体にかいてるなら(VBAから)入力
だな

VBAの仕様書でVBA側を主体にしないのはどうかと思うが
(マクロ付き)エクセルの仕様書だと考えればまあ入力でもいいのかも
0028デフォルトの名無しさん (ワッチョイ a6ba-WYzC)
垢版 |
2021/09/15(水) 23:30:54.86ID:IO2bkDAL0
985なのですが、
ttps://whois.nic.ad.jp/cgi-bin/whois_gw?key=182.22.16.251
から
b. [ネットワーク名] YAHOO-NET
をVBAで抽出するいい方法はあるでしょうか?
0031デフォルトの名無しさん (ワッチョイ 662c-0MLo)
垢版 |
2021/09/16(木) 01:49:26.07ID:tvb8xhvB0
>>28
shift-jis の古いサーバーっぽい。
Ruby で作った

require 'open-uri'
require 'nokogiri'

url = "ここへURL"
doc = Nokogiri::HTML( open( url ) )

elements = doc.css( "pre" )
text = elements.first.content # 1つ目のpreの内容

result = "エラー! 該当なし"
text.each_line( chomp: true ) do | line | # 改行を除去して、各行を処理する
if line.start_with? "b. [ネットワーク名]" # 行頭が何々で始まっていれば
result = line
break
end
end

puts result

出力
b. [ネットワーク名] YAHOO-NET
0034デフォルトの名無しさん (ワッチョイ 5e68-gxqX)
垢版 |
2021/09/16(木) 06:38:12.58ID:COWrCKXD0
利用者数激減の言語
それがruby
0036デフォルトの名無しさん (ワッチョイ ea4f-Eqy2)
垢版 |
2021/09/16(木) 08:25:49.50ID:3isIfw030
>>17
なるほど仕様書の問題か
ならば現場内で紛らわしくないような記載のルールを作ればいいかな。
例えばユーザーが手打ちで設定する場合は「入力」
VBAで書き込む場合は「出力」または「設定」

コード上では「取得」と「設定」とかに分かれるからあまり問題ないだろうけど、仕様書の記載はまた別のセンスが必要になるからね。
一見して分かりやすく曲解のない仕様書を作るときって日本語の難しさを痛感することあるよね。

そういう時は大まかな流れ図みたいなもの書いて添付して紛らわしさを回避するのも一つの手だよ。
0037デフォルトの名無しさん (ワッチョイ 7990-H7Ir)
垢版 |
2021/09/16(木) 11:33:48.95ID:0wHWe9CF0
質問への回答ありがとう
>>17の質問者です

個人的には「人が入力」、「VBAから出力」というとらえ方がしっくりきました

紛らわしくない書き方のルールを作るというのは本当にその通りで、
これは実践したい

日本語は改めて考えると主体が曖昧で難しい…
0038デフォルトの名無しさん (JP 0Hc9-dGLa)
垢版 |
2021/09/16(木) 12:13:09.55ID:/erdykE4H
>>37
日本語の文章ってのは、主語が存在しなくても成立する性質があるんだよ
おかげでどっち視点かわからなくなる現象が起きやすい

逆に英文法では主語がほぼ省略できない
だから単語を置き換えただけの翻訳は不自然な文章になる
0040デフォルトの名無しさん (ワッチョイ 668e-ZlXV)
垢版 |
2021/09/16(木) 14:54:30.21ID:QuckXkbq0
>>38
馬鹿の典型例
0041デフォルトの名無しさん (ワッチョイ b501-lR9W)
垢版 |
2021/09/16(木) 17:31:50.83ID:Z23LNYuB0
質問させてください。

ウェブサイトから特定の場所の情報を抽出するのはこちらのVBAを使用するということで間違いないでしょうか?

またこれはExcelを購入することによって使用できるもので、WindowsでもMacでも使用できるのでしょうか?

現在Macを使用しておりまして、具体的に申し上げるとyahooファイナンスなどの個別銘柄ページから配当利回りなどの情報をまとめて抽出したいと考えております。

スレ違いでしたら申し訳ございませんが、検索してもよく分からなかったので、書き込み数が多いこちらで質問させていただきました。

よろしくお願い申し上げます。
0045デフォルトの名無しさん (ラクッペペ MM3e-oWuh)
垢版 |
2021/09/16(木) 18:41:42.01ID:EvK5hxPzM
他のツールでデータを集めて
結果をExcelにするのが良いよ
csvでもいいんじゃね?
0046デフォルトの名無しさん (ワッチョイ 66da-dGLa)
垢版 |
2021/09/16(木) 19:07:04.50ID:Az+Wn1Ze0
>>41
htmlから簡単なスクレイピングならPower Queryがとっつきやすいかと。
URLのリンク先がcsvやExcelファイル、pdfファイル、
GitHubにあるJSONなんかもこれで結構いける。

CSS構造や、
画面上で検索指定やボタンを押させるような対話型を必要とする
複雑なhtmlなら、Pythonとか。

その先の処理でVBAを組み合わせることはある。
クエリーエラーを避けるため、一つずつシーケンシャルに更新させたいとか、
同時にファイルをDLして保存したいとか。
0047デフォルトの名無しさん (ワッチョイ 5e68-gxqX)
垢版 |
2021/09/16(木) 19:33:58.44ID:COWrCKXD0
>>41
chrome 拡張機能 スクレイピング
で検索すると良い
ちなみにyahooなんかはスクレイピング対策として、短時間で大量にアクセスすると一発で垢一時停止になるぞ

一番いいのはyahoo APIなどのAPIを使う事
0049デフォルトの名無しさん (ワッチョイ 9e8c-xZL4)
垢版 |
2021/09/16(木) 20:24:24.60ID:MqGeVsp10
Macには無料で今流行りのPythonがついているそうなので
スクレイピンクはそっちの方が遥かに簡単じゃないかな
ExcelVBA経験がないのなら
0051デフォルトの名無しさん (ワッチョイ ff2c-QiSa)
垢版 |
2021/09/17(金) 03:52:03.83ID:O1PoA15N0
Rubyist は、たいていMac

スクレイピングは、Ruby, Selenium Webdriver, Nokogiri だけど、
無断で、大量のスクレイピングすると、営業妨害で逮捕される

スクレイピングする際、そのサイトのrobots.txt を遵守しないといけない。
取得したデータは、CSV, JSON、データベースなどに保存する

今は、どの本でも、無断でスクレイピングする事は推奨しないと書いてある。
相手のサイトと契約して、API を使わしてもらうべき!

YouTube API とか、Google Maps API とか、
株式相場などもそう
0054デフォルトの名無しさん (ワッチョイ ffba-fv4A)
垢版 |
2021/09/17(金) 18:44:11.62ID:xtR/7aZz0
>>29, 31
ありがとうございました。
0056デフォルトの名無しさん (アウアウウー Sa5b-4fkB)
垢版 |
2021/09/17(金) 20:40:10.73ID:7ovEcO6ia
>>53
おまえが出来ないのは自業自得
0057デフォルトの名無しさん (ワッチョイ b7cc-W1il)
垢版 |
2021/09/17(金) 22:49:29.45ID:DaER+3fZ0
前の定義で移動できるセルを登録したいのですが、アプリケーションの定義エラーがでます。
範囲は101カ所登録したいのですが、どうやらstr*を3個くらい抜くと動くのですが、名前の定義に制限があるのでしょうか?
str*はどこを抜いても同じです。

Dim stra As String, strb As String, strc As String, strd As String, stre As String, strf As String, strg As String
stra = "=sh1!$H$3:$K$3,sh1!$N$3:$O$3,sh1!$R$3:$S$3," & _
"sh1!$E$6:$N$6,sh1!$O$6:$AC$6,sh1!$AD$6:$BG$6,sh1!$BH$6:$BR$6," & _
"sh1!$BS$6:$CG$6,sh1!$CH$6:$CQ$6,sh1!$CV$6:$DB$6,sh1!$DC$6:DR6," & _
"sh1!$DS$6:$EH$6,sh1!$EI$6:$ER$6,sh1!$ES$6:$FA$6,sh1!$FB$6:$FD$6," & _
"sh1!$FE$6:$FF$6,sh1!$FG$6:$FH$6,"
005857 (ワッチョイ b7cc-W1il)
垢版 |
2021/09/17(金) 22:50:14.26ID:DaER+3fZ0
続き
strb = "sh1!$E$7:$N$7,sh1!$O$7:$AC$7,sh1!$AD$7:$BG$7,sh1!$BH$7:$BR$7," & _
"sh1!$BS$7:$CG$7,sh1!$CH$7:$CQ$7,sh1!$CV$7:$DB$7,sh1!$DC$7:DR7," & _
"sh1!$DS$7:$EH$7,sh1!$EI$7:$ER$7,sh1!$ES$7:$FA$7,sh1!$FB$7:$FD$7," & _
"sh1!$FE$7:$FF$7,sh1!$FG$7:$FH$7,"
strc = "sh1!$E$8:$N$8,sh1!$O$8:$AC$8,sh1!$AD$8:$BG$8,sh1!$BH$8:$BR$8," & _
"sh1!$BS$8:$CG$8,sh1!$CH$8:$CQ$8,sh1!$CV$8:$DB$8,sh1!$DC$8:DR8," & _
"sh1!$DS$8:$EH$8,sh1!$EI$8:$ER$8,sh1!$ES$8:$FA$8,sh1!$FB$8:$FD$8," & _
"sh1!$FE$8:$FF$8,sh1!$FG$8:$FH$8,"
strd = "sh1!$E$9:$N$9,sh1!$O$9:$AC$9,sh1!$AD$9:$BG$9,sh1!$BH$9:$BR$9," & _
"sh1!$BS$9:$CG$9,sh1!$CH$9:$CQ$9,sh1!$CV$9:$DB$9,sh1!$DC$9:DR9," & _
"sh1!$DS$9:$EH$9,sh1!$EI$9:$ER$9,sh1!$ES$9:$FA$9,sh1!$FB$9:$FD$9," & _
"sh1!$FE$9:$FF$9,sh1!$FG$9:$FH$9,"
stre = "sh1!$E$10:$N$10,sh1!$O$10:$AC$10,sh1!$AD$10:$BG$10,sh1!$BH$10:$BR$10," & _
"sh1!$BS$10:$CG$10,sh1!$CH$10:$CQ$10,sh1!$CV$10:$DB$10,sh1!$DC$10:DR10," & _
"sh1!$DS$10:$EH$10,sh1!$EI$10:$ER$10,sh1!$ES$10:$FA$10,sh1!$FB$10:$FD$10," & _
"sh1!$FE$10:$FF$10,sh1!$FG$10:$FH$10,"
0059デフォルトの名無しさん (ワッチョイ b7cc-W1il)
垢版 |
2021/09/17(金) 22:50:45.98ID:DaER+3fZ0
続き
strf = "sh1!$E$11:$N$11,sh1!$O$11:$AC$11,sh1!$AD$11:$BG$11,sh1!$BH$11:$BR$11," & _
"sh1!$BS$11:$CG$11,sh1!$CH$11:$CQ$11,sh1!$CV$11:$DB$11,sh1!$DC$11:DR11," & _
"sh1!$DS$11:$EH$11,sh1!$EI$11:$ER$11,sh1!$ES$11:$FA$11,sh1!$FB$11:$FD$11," & _
"sh1!$FE$11:$FF$11,sh1!$FG$11:$FH$11,"
strg = "sh1!$E$12:$N$12,sh1!$O$12:$AC$12,sh1!$AD$12:$BG$12,sh1!$BH$12:$BR$12," & _
"sh1!$BS$12:$CG$12,sh1!$CH$12:$CQ$12,sh1!$CV$12:$DB$12,sh1!$DC$12:DR12," & _
"sh1!$DS$12:$EH$12,sh1!$EI$12:$ER$12,sh1!$ES$12:$FA$12,sh1!$FB$12:$FD$12," & _
"sh1!$FE$12:$FF$12,sh1!$FG$12:$FH$12"
ActiveWorkbook.Names.Add Name:="Nyuryoku2", RefersToLocal:=stra & strb & strc & strd & stre & strf & strg
0060デフォルトの名無しさん (ワッチョイ bf8c-V+sB)
垢版 |
2021/09/17(金) 23:08:43.51ID:VKkEr3i80
255文字
0061デフォルトの名無しさん (JP 0Hfb-qDHA)
垢版 |
2021/09/17(金) 23:31:47.79ID:4pHWHBC6H
>>57
1274文字まで
質問のために加工したんでなければ、その範囲はもっとシンプルにまとめられるぞ
"=$H$3:$K$3,$N$3:$O$3,$R$3:$S$3,$E$6:$CQ$12,$CV$6:$FH$12"
0065デフォルトの名無しさん (ワッチョイ bf8c-V+sB)
垢版 |
2021/09/18(土) 12:10:53.45ID:vNZ9H73d0
名前定義ってRangeオブジェクトからでもできるのか 知らなかった
Range("B1:G10").Name = "Nyuuryoku2"
0068デフォルトの名無しさん (ワッチョイ bf8c-V+sB)
垢版 |
2021/09/18(土) 16:41:01.37ID:vNZ9H73d0
名前の管理を簡単にする便利なアドインって誰か作ってないの?
(とおねだり)
0075デフォルトの名無しさん (ワッチョイ 9701-IhC7)
垢版 |
2021/09/19(日) 10:09:24.37ID:IfToBfi40
Internet Explorer_Serverのハンドルから取得したIHTMLDocumentオブジェクトではそのページ内での操作はできましたが
Navigate実行時にメソッドをサポートしていないというエラーになります
別のURLへ移動する方法ありますか?
0077デフォルトの名無しさん (アウアウウー Sa5b-hED7)
垢版 |
2021/09/19(日) 12:45:26.42ID:/yxUr6Cya
IEのオプションでcssの設定を変える
0078デフォルトの名無しさん (ワッチョイ 9701-IhC7)
垢版 |
2021/09/19(日) 14:05:15.93ID:IfToBfi40
>>76

検証中のためハンドルも直接入力してますし
コードも他のサイトの転用したものだったりかなり端折ってますが
何か解りましたらよろしくお願いします

Private Declare PtrSafe Function CLSIDFromString Lib "ole32" (ByVal pString As LongPtr, ByRef pCLSID As Currency) As Long
Private Declare PtrSafe Function RegisterWindowMessageW Lib "user32" (ByVal lpString As LongPtr) As Long
Private Declare PtrSafe Function SendMessageTimeoutW Lib "user32" (ByVal hWnd As LongPtr, ByVal msg As Long, ByVal wParam As LongPtr, ByRef lParam As LongPtr, ByVal fuFlags As Long, ByVal uTimeout As Long, ByRef lpdwResult As Long) As LongPtr
Private Declare PtrSafe Function ObjectFromLresult Lib "oleacc" (ByVal lResult As Long, ByRef riid As Currency, ByVal wParam As LongPtr, ppvObject As Any) As Long
Private Enum SMTO
NORMAL = 0
BLOCK = 1
ABORTIFHUNG = 2
NOTIMEOUTIFNOTHUNG = 8
End Enum

Sub test()
Dim hWnd As Long
hWnd = 136698
Set objDoc = GetHtmlDocument(hWnd)

'objDoc.Navigate ("https://www.google.co.jp/";)

'Googleの検索窓に入力
objDoc.getElementsByName("q")(0).Value = "test"

End Sub
0079デフォルトの名無しさん (ワッチョイ 9701-IhC7)
垢版 |
2021/09/19(日) 14:06:52.91ID:IfToBfi40
続き
Public Function GetHtmlDocument(ByVal hWnd_InternetExplorer_Server As LongPtr, Optional ByVal uTimeout As Long = 1000, Optional ByVal documentVersion As Integer = 1) As Object ' As MSHTML.IHTMLDocument
Set GetHtmlDocument = Nothing

If documentVersion <= 0 Then
documentVersion = 1
ElseIf documentVersion >= 8 Then
documentVersion = 8
End If
Dim IID_IHTMLDocumentX As String
IID_IHTMLDocumentX = Split(",{626FC520-A41E-11cf-A731-00A0C9082637},{332c4425-26cb-11d0-b483-00c04fd90119},{3050f485-98b5-11cf-bb82-00aa00bdce0b},{3050f69a-98b5-11cf-bb82-00aa00bdce0b},{3050f80c-98b5-11cf-bb82-00aa00bdce0b},{30510417-98b5-11cf-bb82-00aa00bdce0b},{305104b8-98b5-11cf-bb82-00aa00bdce0b},{305107d0-98b5-11cf-bb82-00aa00bdce0b}", ",")(documentVersion - 1)
Dim InterfaceId(1) As Currency
Call CLSIDFromString(StrPtr(IID_IHTMLDocumentX), InterfaceId(0))

Dim lngMsg As Long
lngMsg = RegisterWindowMessageW(StrPtr("WM_HTML_GETOBJECT"))
If lngMsg <> 0 Then
Dim lpdwResult As Long
If SendMessageTimeoutW(hWnd_InternetExplorer_Server, lngMsg, 0, 0, SMTO.ABORTIFHUNG, uTimeout, lpdwResult) <> 0 Then
Dim hResult As Long
hResult = ObjectFromLresult(lpdwResult, InterfaceId(0), 0, GetHtmlDocument)
If hResult <> 0 Then
Err.Raise hResult
End If
End If
End If
End Function
0081デフォルトの名無しさん (ワッチョイ bf8c-xsW+)
垢版 |
2021/09/19(日) 21:14:40.95ID:+Er1+t3H0
navigateじゃなくてcreateDocumentFromUrlじゃないの?
知らんけど
0082デフォルトの名無しさん (ワッチョイ 9f6b-W1il)
垢版 |
2021/09/20(月) 00:12:39.27ID:wP8fgZ+m0
A1からA10000にデータが有って検索したい文字列があったとする。
この場合,範囲をdictionaryで調べるのと配列で調べるのは速度は同じぐらい??
0085デフォルトの名無しさん (ワッチョイ 9f6b-W1il)
垢版 |
2021/09/20(月) 10:43:06.46ID:wP8fgZ+m0
えっ?そうなの??
0086デフォルトの名無しさん (ワッチョイ 9f6b-W1il)
垢版 |
2021/09/20(月) 10:44:41.60ID:wP8fgZ+m0
試しましたが、
コードはdictionaryのほうがすっきりした。
体感速度はあまり変わりませんでした。
0088デフォルトの名無しさん (ワッチョイ bf8c-xsW+)
垢版 |
2021/09/20(月) 11:55:16.12ID:djFT0hLf0
コード醸せよ
0090デフォルトの名無しさん (ワッチョイ bf68-I2En)
垢版 |
2021/09/20(月) 12:27:59.43ID:lHEjG93V0
xxとyyどっちが早い、というのは本当に試した方が早い
バージョンアップで最適化されて、すげー早くなってる事がある
0095デフォルトの名無しさん (アウアウウー Sa5b-ONKb)
垢版 |
2021/09/20(月) 16:38:36.67ID:my+lQwjla
イヤ
マジで>>86はウザいわ
2度と来るな
0096デフォルトの名無しさん (ワッチョイ bf8c-xsW+)
垢版 |
2021/09/20(月) 16:58:36.07ID:djFT0hLf0
スルー力がない奴もセットて消えろ
0101デフォルトの名無しさん (オッペケ Srcb-KXEG)
垢版 |
2021/09/20(月) 18:05:45.62ID:Mz1RekPdr
モジュールとボタンを別のブックにコピーしたくてできたと思ったんだけど
ボタンに登録されるマクロがコピー元のマクロになっちゃってとうすりゃええのか分からん
.OnAction=Thisbook&”マクロ名”とかじゃ動かないのね
0104デフォルトの名無しさん (ワッチョイ bf8c-xsW+)
垢版 |
2021/09/20(月) 21:44:55.52ID:djFT0hLf0
ボタンをインポート?
これも楽な方法があったらいいのにね
0105デフォルトの名無しさん (ワッチョイ bf68-I2En)
垢版 |
2021/09/20(月) 21:51:19.19ID:lHEjG93V0
シート上のフォームコントロールを消す時って
・右クリックで選択
・コンテキストメニューをESCで消す
・切り取り、もしくは「deleteキー」
で合ってますか?

選択する時はF5キーのオブジェクトでもいいんですけど、
どちらにしろ右クリックで選択というのが何か気持ち悪い
0106デフォルトの名無しさん (ワッチョイ bf68-I2En)
垢版 |
2021/09/20(月) 21:58:02.93ID:lHEjG93V0
>>101
sheetモジュールのマクロ?
それとも標準モジュールのマクロ?

どちらによるかでやり方が変わる
0107デフォルトの名無しさん (ワッチョイ bf8c-xsW+)
垢版 |
2021/09/20(月) 21:58:44.81ID:djFT0hLf0
Ctrl+クリック
Delete
でいいんじゃない
0108デフォルトの名無しさん (ワッチョイ bf68-I2En)
垢版 |
2021/09/20(月) 22:10:20.73ID:lHEjG93V0
>>107
短縮できました、ありがとうございました
0109デフォルトの名無しさん (アウアウアー Sa4f-1CsF)
垢版 |
2021/09/21(火) 16:59:19.72ID:6V+SG26ea
private subのどのプロシージャーからでも、グローバル変数に入った値を取り出す方法として、

たとえばenvという標準モジュールを作り、そのなかで

public dim grobal_a as string

sub hoge
global_a = "aaaa"
end sub


とやっておき、

エクセルのブック起動と同時にこの初期値を入れておきたいので
thisWorkbookにcall hoge

ってやるの、普通?
0115デフォルトの名無しさん (ワッチョイ bf68-I2En)
垢版 |
2021/09/21(火) 21:29:23.86ID:pV6hI0Vx0
>>109
vbaってグローバル変数の初期化できないのか・・・
見たことはない。変な気はする
とりあえずはシートに書くほうが楽だと思う
constでいいなら初期化が出来る。社名みたいにほぼ絶対変わらない物ならこれでもいいかも

Public Const 定数 = 1
sub foo
debug.print 定数
end sub

>>113
わらった
0116デフォルトの名無しさん (ワッチョイ 9f4f-CwtL)
垢版 |
2021/09/22(水) 07:59:00.83ID:ucS/NBRX0
>>109
普通か普通ではないか、と言われれば普通ではないかなぁ。
ではどこが、と言われるとまずモジュール変数をグローバル指定しているところはPrivateにして外部から呼び出す用のプロパティに組み込む。これでどこかで値が変更されてもブレイクポイント仕掛けてどこで呼び出されて値が変更されたかを確認出来るようになる。

あと、初期化用の関数はPublic指定にしておかないと別のモジュールから呼び出せないよ。ThisWorkbookから呼び出すんでしょ?
0120デフォルトの名無しさん (ワッチョイ f72f-fBlf)
垢版 |
2021/09/22(水) 15:13:16.34ID:XBxd6ZoY0
書籍「イヤンもう!最初からそう教えてくれればいいのに!ExcelVBAのプログラミングのツボとコツがゼッタイにわかる本」の評判はどうですか?買うか検討中なのですが。
0125デフォルトの名無しさん (ワッチョイ bf68-I2En)
垢版 |
2021/09/22(水) 20:05:10.79ID:anCt84pS0
イヤンもう
って言うから検索したら特にそんな単語ついてないじゃないですか
0127デフォルトの名無しさん (ワッチョイ bf68-I2En)
垢版 |
2021/09/22(水) 22:05:18.59ID:anCt84pS0
若い子が水着姿で教えるVBAの本なら簡単に死ぬほど売れるのでは?と思った
0132デフォルトの名無しさん (アウアウウー Sa5b-ONKb)
垢版 |
2021/09/22(水) 23:14:36.78ID:jBUNeyMwa
「はたらくプログラミング 」
「高校生からはじめる プログラミング」
「メイクロックマン 史上最大のプログラミング」
「独学プログラマー Python言語の基本から仕事のやり方まで」
のようなアニメやゲームキャラやイケメンを
採用して若い子にアピールするとか
「乙女チック4Gamer」第267回:
「推しと学べるプログラミング」
初心者も学べるプログラミング学習ゲーム
とか

美少女×プログラミング学習×ソーシャルゲーム『コードガールこれくしょん』
とかゲームで呼び込み

恋のプログラミング~ダメ男の見分け方~ DVD-BOX2
のようなDVDを付録に付けてみたりとか
とかとにかくVBAもなんとか頑張って欲しい
0133デフォルトの名無しさん (ワッチョイ ff10-dWRi)
垢版 |
2021/09/22(水) 23:55:17.87ID:ToEmXEKY0
オレも1冊3000円くらいのVBAの本買ったわ
その本をキーボードの下奥に置くと角度が良い感じになるんだわ
手首が疲れないし、職場でもなんか「やってる」感がかもし出せるし、本当に買って良かったと思える1冊だったな
0135デフォルトの名無しさん (ワッチョイ 9f4f-CwtL)
垢版 |
2021/09/23(木) 00:27:06.21ID:4aFmMHLK0
>>132
ん。
昔、EXCELVBAゲーム大作戦とかいう本が出てたよ。まぁVBAも昔からあるからゲーム作るのも先駆者がいたんだね。

けど、結局難しいというか、お仕事で覚えることとベクトルが違うんだよ。1/60秒単位で押されているキーの値読み取って、キャラクターや地形描いてその当たり判定行なったりね。

まぁ暇でそういうの作ってみたいというのにはいいかもだけど、お仕事でVBA使うのの興味を持つために、というのにはちょっと重いかもね。
0136デフォルトの名無しさん (ワッチョイ bf68-I2En)
垢版 |
2021/09/23(木) 00:56:08.87ID:O9y54sVl0
>>133
分かりすぎる
分厚い本って意外と重宝するよなw
0137デフォルトの名無しさん (ワッチョイ bf68-I2En)
垢版 |
2021/09/23(木) 00:59:12.19ID:O9y54sVl0
vbaでゲームは基本的にかなりめんどくさい
メインのループ処理がキツイ
定期的に処理をエクセルに返してあげないと色々と不具合が起きる
曲芸でなければvbaで作るのは絶対に避けたほうが良い
0138デフォルトの名無しさん (ワッチョイ 9fad-qDHA)
垢版 |
2021/09/23(木) 09:34:39.93ID:MTBJM7920
2つあるフレームの位置を調整していたら、
フレームAをフレームBの中にドラッグしてしまったらしく、
2つのフレームが一緒になってしまいました。

プロパティウィンドウを見ると、フレームAはまだ存在するのですが、
画面上にはフレームBしか表示されていないため、Aを選択することができず、
AをBから分離することができません。

AのLeftやTopを変更してみましたが、画面上に変化はありませんでした。

何かいい解決法があれば教えてください。
0139デフォルトの名無しさん (ワッチョイ 9fad-qDHA)
垢版 |
2021/09/23(木) 09:39:09.54ID:MTBJM7920
自己解決しました。

@プロパティウィンドウでプルダウンからフレームAを選択する。
ACtrl+[A]で全選択した後、Ctrl+[X]で切り取り状態にする。
BフレームBのエリア外にマウスカーソルを持っていき、Ctrl+[V]で貼り付ける。
0140デフォルトの名無しさん (ワッチョイ bf68-I2En)
垢版 |
2021/09/23(木) 11:52:58.11ID:O9y54sVl0
おめ〜^^
0149デフォルトの名無しさん (ワッチョイ bf8c-xsW+)
垢版 |
2021/09/23(木) 15:12:01.32ID:AtVLca4O0
系列数に上限がいかにもありそう 255とか
0152デフォルトの名無しさん (オッペケ Srcb-C0eV)
垢版 |
2021/09/23(木) 18:52:18.65ID:c0lh6Lzfr
ごめんなさい
セルからではなく配列から直接グラフを読み込むときの話です。
自分の場合配列から散布図書いてて
データ数が15000?あたりから表示されなくなったので
0154デフォルトの名無しさん (ワッチョイ c23d-4IKK)
垢版 |
2021/09/24(金) 16:28:38.47ID:GLO6/yx90
VBAで、リボンを常に表示させるてことできるんですか?
ググると
Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"", True)"
ていうのが出てくるんですが、
”タブとコマンドの表示”ていう状態にしたい。
0158デフォルトの名無しさん (ワッチョイ 1e68-wYsx)
垢版 |
2021/09/25(土) 07:24:00.70ID:i7f0lbxJ0
しっかりと自分で考える事が大事!向上心をもって勉強しよう!
0163デフォルトの名無しさん (アウアウキー Saef-nXzz)
垢版 |
2021/09/25(土) 15:09:26.96ID:kjOWSdg4a
>>161
聞く方もじじいだし
0164デフォルトの名無しさん (ササクッテロレ Sp47-2mxq)
垢版 |
2021/09/25(土) 22:54:03.42ID:/8ShLWKPp
エクセル詳しい方にご質問。

保護シートの「オートフィルター使用」にチェックつけてる状態で、
Range(Cells(1,1),Cells(1,5)).AutoFilterを実行すると保護解除しろと言われるのですが、原因わかりますか?

Rangeで指定しているセル範囲の保護を外しても言われる始末。
オートフィルターの使用を許可すりゃ通るもんだと思ってました。

見えない仕組みとか、基本的な仕様を見逃してるんかなぁ…
0165デフォルトの名無しさん (ワッチョイ e32f-6iP1)
垢版 |
2021/09/25(土) 23:52:15.96ID:wPvtJ2EG0
>>164
オートフィルターのオンオフはできないのが仕様だな
https://support.microsoft.com/ja-jp/office/%e3%83%af%e3%83%bc%e3%82%af%e3%82%b7%e3%83%bc%e3%83%88%e3%82%92%e4%bf%9d%e8%ad%b7%e3%81%99%e3%82%8b-3179efdb-1285-4d49-a9c3-f4ca36276de6?ns=excel&;version=90&syslcid=1041&uilcid=1041&appver=zxl900&helpid=21290&ui=ja-jp&rs=ja-jp&ad=jp
注: ユーザーは、この設定に関係なく、保護されたワークシートでオートフィルターを適用または削除できません。
0166デフォルトの名無しさん (ワッチョイ 12ad-zD50)
垢版 |
2021/09/26(日) 00:17:38.53ID:BPwZjS350
とあるフォルダへのショートカットを作成する方法を調べたところ、
コーディング前に、
>参照設定は、VBA画面→ツールメニュー→参照設定で「Windows Script Host Object Model」を選択します。
>これでWshShellクラスとWshShortcutクラスを利用できるようになります。
という記述がありました。

それで作れそうですが、
作った.xlsmファイルを他人に渡した場合、
その相手が上記の参照設定をしていない環境だったとしても、ショートカットの作成は行えますか?
0167デフォルトの名無しさん (ササクッテロレ Sp47-2mxq)
垢版 |
2021/09/26(日) 00:44:49.64ID:vU9Y5LAHp
>>165
ご回答頂きありがとうございます。

こういう基本的な説明くらい最初から見とけって話でしたね。

しかし、シートの保護とAutoFilterを両立できないとは、痒いところに手が届かない仕様ですな。
0170デフォルトの名無しさん (ワッチョイ 12ad-zD50)
垢版 |
2021/09/26(日) 01:46:25.94ID:BPwZjS350
ちなみに、
@参照設定で「Windows Script Host Object Model」をONにする。
AWshShellクラスとWshShortcutクラスを利用してコーディングする。
Bプログラムを実行する。
Cショートカットの作成に成功する。
D参照設定で「Windows Script Host Object Model」をOFFにする。
Eプログラムを実行する。
Fショートカットの作成に失敗する。(Aの中の定義について「ユーザ定義型は定義されていません」のエラー)
となったので、
>>166については、相手にも参照設定をしてもらわないとショートカットの作成は行えない、ということだと思います。
0173デフォルトの名無しさん (アウアウクー MM87-b517)
垢版 |
2021/09/26(日) 18:28:19.91ID:6z2Q/VJPM
二次元配列の第三カラムが重複していたらレコードまるごと排除して、かつ排除された分のレコードを別シートに転記することってできます?

連想配列に入れておけば重複してたらわかるようになるけど、そういう方法ってまとも?
0178デフォルトの名無しさん (ワッチョイ e32f-pveB)
垢版 |
2021/09/27(月) 17:52:26.41ID:wG/2iXK70
配列は要素数が増減するものには向いてない
が、まあいろいろ頑張ればできる

連想配列でわかるのは、入れようとしたときに重複するかどうかで、そもそも重複したものは入っていないだろ
0179デフォルトの名無しさん (ワッチョイ 1e68-wYsx)
垢版 |
2021/09/27(月) 21:07:52.71ID:9JOCRyj50
>配列は要素数が増減するものには向いてない
「vbaの」配列な
他の言語にはpushとか色々便利なものがあるんやで
0181デフォルトの名無しさん (ワッチョイ 1e68-wYsx)
垢版 |
2021/09/27(月) 23:17:35.36ID:9JOCRyj50
シート入れれば三次元やぞ
0182デフォルトの名無しさん (ドコグロ MM33-c1VD)
垢版 |
2021/09/28(火) 06:06:35.41ID:NhFpYAOsM
>>179
> 他の言語にはpushとか色々便利なものがあるんやで
スクリプト言語とかだろそれ
言語自体の機能として配列のサイズを変えられる言語はそんなに多くないよ
そもそもVBAはその多くない言語に含まれるし
0184デフォルトの名無しさん (ワッチョイ 92ad-mV7G)
垢版 |
2021/09/28(火) 12:14:47.38ID:fFhZgLlN0
>>182
実はVBAは「配列」のサイズを変えれる数少ない言語
まあ多分全コピー発生してるんだろうけど
コレクション系が弱いからそれぐらいできんとかなりツラい
今なら.NETの使うとか出来るけど
0187デフォルトの名無しさん (ワッチョイ 6f8e-emG0)
垢版 |
2021/09/28(火) 15:43:04.78ID:ZLV/p08A0
「たくさん」と言ったってワークステーションやサーバ系のハードウェアでない限りせいぜい64GBか128GBが上限では?
0189デフォルトの名無しさん (ワッチョイ 4be5-XWMK)
垢版 |
2021/09/28(火) 16:43:48.67ID:yyyanN8B0
64KBまでだよ
0191デフォルトの名無しさん (ワッチョイ 96bb-PL4X)
垢版 |
2021/09/28(火) 17:35:37.46ID:Fgmzo9M90
long配列の下位16ビットにデータ格納されている
long[0],[1]の下位16ビットを結合するとsingleの値となる
(要はsingleが16ビット分割されてlong型に格納されている)
こんなデータが大量に格納されるんですが、上手く結合して型変換する方法がわかりません。。
val("&H" & hex(long(1)) & hex(long(0)))
で32ビット結合はできましたが、その後の暗黙的な変換なしでsingleに変更するにはどうするのが良いでしょうか?
0193デフォルトの名無しさん (スップ Sd32-zD50)
垢版 |
2021/09/28(火) 20:20:03.83ID:chK2kmIxd
>>191
禁じ手だけどユーザー定義型とLSetで変数の中身を型変換せずに直接コピーできる
LongをSingleにコピーする例

Type TypeLong
  varLong As Long
End Type

Type TypeSingle
  varSingle As Single
End Type

Sub Long2Single()
  Dim myLong As TypeLong
  Dim mySingle As TypeSingle
  LSet mySingle = myLong
End Sub
0194デフォルトの名無しさん (ワッチョイ 124f-E55q)
垢版 |
2021/09/28(火) 21:06:13.76ID:mkxQja700
>>191
ん?
今一つよく分からんけど、CSng使って明示的に変換すればいいんじゃないの?

Sub Convert()
Dim originalValue(1) As Long
Dim convertSingle As Single

originalValue(0) = 1
originalValue(1) = 3

convertSingle = CSng(CDbl(originalValue(0) And 65535)) * 65536 + (originalValue(1) And 65535)

Debug.Print convertSingle

End Sub

こんな感じに。
オーバーフローして表示しきれなくなった分は知らんけど。
0195デフォルトの名無しさん (ワッチョイ 124f-E55q)
垢版 |
2021/09/28(火) 21:56:37.27ID:mkxQja700
おっと、すまんこ
括弧の位置間違えてた

Option Explicit

Sub Convert()
Dim originalValue(1) As Long
Dim convertSingle As Single

originalValue(0) = 7
originalValue(1) = 15

convertSingle = CSng(CDbl(originalValue(0) And 65535) * 65536 + (originalValue(1) And 65535))

Debug.Print convertSingle

End Sub

こうかな。
因みにビット扱っているなら説明すると失礼に当たるかもだけど、
65535は16進で&HFFFF、65536は16進で&H10000ね。
ANDは論理演算子ではなくてビット演算子。
0196デフォルトの名無しさん (ワッチョイ e32f-pveB)
垢版 |
2021/09/29(水) 02:45:23.84ID:DNRsGaHg0
>>191
SingleもLongも32ビット長なんだが、Singleの内部形式が分割されて二つのLongに16ビットずつ格納されているのか?
なんでそんなことになってるんだよ。Integer二つでいいじゃないか

考え方としては>>193さんの言う通りLSetでできる
二つのLongから有効な32ビット抜き出すのが手間だけど

Singleの内部形式はIEEE 754のはずだから、自分でビット演算してもできるだろうけど
0197デフォルトの名無しさん (ワッチョイ e32f-pveB)
垢版 |
2021/09/29(水) 02:50:45.14ID:DNRsGaHg0
とりあえず作ってみた
エンディアンの呪いがかかってても知らんw
Type TypeQByte
varByte1 As Byte
varByte2 As Byte
varByte3 As Byte
varByte4 As Byte
End Type
Type TypeLong
varLong As Long
End Type
Type TypeSingle
varSingle As Single
End Type
Function WLong2Single(ByVal long1 As Long, ByVal long2 As Long) As Single
Dim myLong1 As TypeLong
Dim myLong2 As TypeLong
Dim myQByte As TypeQByte
Dim tmpQByte As TypeQByte
Dim mySingle As TypeSingle
myLong1.varLong = long1
myLong2.varLong = long2
LSet tmpQByte = myLong1
myQByte.varByte1 = tmpQByte.varByte3
myQByte.varByte2 = tmpQByte.varByte4
LSet tmpQByte = myLong2
myQByte.varByte3 = tmpQByte.varByte3
myQByte.varByte4 = tmpQByte.varByte4
LSet mySingle = myQByte
WLong2Single = mySingle.varSingle
End Function
0198デフォルトの名無しさん (スップ Sd52-zD50)
垢版 |
2021/09/29(水) 03:32:54.18ID:hT//j47fd
VBAには共用体もポインタもないから、
LSetでメモリの内容をコピー
バイナリファイル経由
IEEEの内部フォーマットに合わせてゴリゴリ計算
ぐらいしか思い付かん

この中ではLsetが一番シンプルだし高速
上位、下位の順番が分からんから適当に書くけど、基本的にはこんな感じ
MyLong = Long0 * &h10000 + Long1
Lset MySingle = MyLong

C#とか使えばもっと簡単にできるんで、そもそもこの作業はVBAに向いてない
0200デフォルトの名無しさん (スプッッ Sdea-zD50)
垢版 |
2021/09/29(水) 05:23:25.92ID:HULqg2bxd
符号ビット対策
64bit限定ならLongLong型を経由すればもっと簡単になるのか?どう書けばいいのかわからんけど

Dim MSB As Long
MSB = (Long0 And &H8000) And &H80000000
MyLong = MSB Or ((Long0 And &H7FFF) * &H10000 + Long1)
0202デフォルトの名無しさん (ワッチョイ 124f-WaYq)
垢版 |
2021/09/29(水) 08:25:13.60ID:slA14A+y0
>>201
いや、Longの中に入っている時点でマイナスなら* -1してやればいいだけだけど、だったらもっと範囲の広い型で後ろ2バイト以外クリアする方が分岐もなくスッキリするだろう
0203デフォルトの名無しさん (スフッ Sd32-zD50)
垢版 |
2021/09/29(水) 08:41:09.05ID:+gGxbszWd
>>202
元データの上位2バイトが00で埋まってた場合、論理シフトで符号が変わる場合があるでしょ
VBAには論理シフトがないから、何か別の方法で再現する必要があると思うんだけど
具体的に、動くコード書いてみて
0204デフォルトの名無しさん (ブーイモ MM0e-PL4X)
垢版 |
2021/09/29(水) 09:29:57.66ID:ilMiUA0BM
Byte型からLSetが単純で一番速いと思う

定義(追加部分のみ)

Type tyByte
  Byte0 As Byte
  Byte1 As Byte
  Byte2 As Byte
  Byte3 As Byte
End Type

代入処理はこんな感じ
データの格納順序は知らんから適当

myByte.Byte0 = long0 And &HFF&
myByte.Byte1 = (long0 And &HFF00&) \ &H100&
myByte.Byte2 = long1 And &HFF&
myByte.Byte3 = (long1 And &HFF00&) \ &H100&
LSet mySingle = myByte
0206デフォルトの名無しさん (ワッチョイ 124f-WaYq)
垢版 |
2021/09/29(水) 12:56:20.18ID:slA14A+y0
>>203
ちょっと何を言ってるか分かりませんね。
まずシフトの話はどこから出てきたの?
Long型ならマイナスであれば常にトップビットは
立っているよね?
だからプラスに変換するってことだけど?
トップビットが立っていなければプラスなんで変換する必要はない。
もちろん、最初の設定値のLong型の下位2バイトでマイナスを表現するならそれぞれ*-1してやらなきゃいけないけど>>191を見た限りではそのような扱いでもないしね。

途中でマイナスをもつような型の変数に入れるなら
その後始末をしないといけないというだけ。
そもそもトップビットがなぜ符号なのかというところから理解しないとね。
トップビットを単純に0にすればプラスの値に置き換わるというものでもないし。

例えば、1バイトの変数で言えば、-1はFFhだよね。
これのトップビットを倒すと、7Fhになる。
つまり、1にはならずに127になるよね。
0212デフォルトの名無しさん (ワッチョイ 124f-E55q)
垢版 |
2021/09/29(水) 22:47:00.69ID:slA14A+y0
>>211
うん。それであってるよ。
ただ、.Netみたいにアンサインな型の変数が無いから
それをどうしようか、という話。
Longで普通に計算すると上位2バイトに65535(&HFFFF)辺りが入れば
例えば&HFFFF00000が入ったとして、4294901760が欲しいのに
普通にLong型だと-65536が取れちゃったりするよね。
0213デフォルトの名無しさん (ワッチョイ 124f-WaYq)
垢版 |
2021/09/29(水) 23:33:48.06ID:slA14A+y0
あ、でも*-1する方法じゃダメか。
これはあくまでマイナスをプラスにする方法であって、トップビットが立っていてもプラスとみなす方法じゃないからね。
そう考えるとやっぱりもう少し幅の広い変数持っといて計算する方法が楽かな。

だからみんなByte型とか使ってたのかー。
なんか勉強になったわ。
0214デフォルトの名無しさん (スプッッ Sdea-zD50)
垢版 |
2021/09/29(水) 23:39:44.93ID:+/PybBD+d
一つの例として、
Long[0]=&h00000000
Long[1]=&h00003E20
の時、得られるSingle値は0.15625になる
正しく計算できてるかどうか試してみればいい

>>191
Hexの戻り値は4桁とは限らないから、それでは正しく結合できないよ
0215デフォルトの名無しさん (スプッッ Sdea-zD50)
垢版 |
2021/09/29(水) 23:43:02.21ID:+/PybBD+d
あまんり綺麗なコードじゃないけど、一応動くと思う
Option Explicit
Type tySingle
  varSingle As Single
End Type
Type ty4Byte
  Byte0 As Byte
  Byte1 As Byte
  Byte2 As Byte
  Byte3 As Byte
End Type

Sub Long2Single()
  Dim mySingle As tySingle
  Dim my4byte As ty4Byte
  Dim long0 As Long, long1 As Long
  long0 = &H0&
  long1 = &H3E20&
  my4byte.Byte0 = long0 And &HFF&
  my4byte.Byte1 = (long0 And &HFF00&) \ &H100&
  my4byte.Byte2 = long1 And &HFF&
  my4byte.Byte3 = (long1 And &HFF00&) \ &H100&
  LSet mySingle = my4byte
  Debug.Print mySingle.varSingle
End Sub
0216デフォルトの名無しさん (ワッチョイ 0349-PXWQ)
垢版 |
2021/09/30(木) 00:24:00.39ID:PZiEyg+B0
Option Explicit

Private Type TPLong
long0 As Long: long1 As Long
End Type
Private Type TPByte
byte0 As Byte: byte1 As Byte: byte2 As Byte: byte3 As Byte
byte4 As Byte: byte5 As Byte: byte6 As Byte: byte7 As Byte
End Type
Private Type TPSingle
single0 As Single: single1 As Single
End Type
Private Sub test()
Dim L As TPLong
Dim B As TPByte
Dim S As TPSingle

L.long0 = &H0
L.long1 = &H3E20&

LSet B = L
B.byte2 = B.byte4
B.byte3 = B.byte5

LSet S = B

Debug.Print S.single0

End Sub

動いた。改行多すぎって言われたので詰めて書いてる。
0217デフォルトの名無しさん (ワッチョイ e32f-pveB)
垢版 |
2021/09/30(木) 00:49:27.70ID:pCEIeulu0
>>214
それ、Longの上位下位どっち側にデータ入れるかによって
00 00 3E 20 で、数値表現としては &h3E200000 かもしれん
>>197はその前提で作ってるし>>211の図もそうだな

と思ったけど、HEX表現でそのまま連結してOKとか思ってるのか
3E 20 00 00 って格納してるのが正解なのか
エンディアンの呪いやっかいだなぁ
0219デフォルトの名無しさん (スフッ Sd32-zD50)
垢版 |
2021/09/30(木) 06:14:58.44ID:gM2Bcn3cd
>>217
質問者が単純にHex関数の連結だけでOKだったと書いてるから、それぞれ下位16bitを使ってて、Long[0]が下位、Long[1]が上位側と読み取れる
まあ逆だったとしても簡単に修正できるし
0220デフォルトの名無しさん (アウアウキー Saef-nXzz)
垢版 |
2021/09/30(木) 08:01:56.59ID:R3l1DBbza
質問する前に良く考えれば自力でできたんじゃね
0221デフォルトの名無しさん (ワッチョイ c23d-4IKK)
垢版 |
2021/09/30(木) 09:52:07.40ID:Vb95uiyM0
VBAで標準モジュールを削除するコードを書いてるんだけど、消えない場合がなくね?
removeしてもそれがすぐに反映されない。
commitするようなコマンドてある?
0222デフォルトの名無しさん (ラクッペペ MMde-XWMK)
垢版 |
2021/09/30(木) 10:02:50.98ID:R1d8oRoFM
ないならいいじゃん
0227デフォルトの名無しさん (ワッチョイ c23d-4IKK)
垢版 |
2021/09/30(木) 12:35:11.89ID:Vb95uiyM0
調べるとこういうことが起こってるみたいだな。
https://try2explore.com/questions/jp/11366816

VBComponents.Remove呼び出しは、VBAの実行が停止した場合にのみ実際に有効になる場合があります。
つまり、すべてのステートメントが終了するまで、またはコードがブレークポイントに達してデバッグを停止するまで、
削除操作は有効になりません。
これは、新しいモジュールをインポートするか、既存のモジュールのコードを新しいモジュールに置き換えるための次のコードが原因で問題になります。
0230デフォルトの名無しさん (ワッチョイ 2701-CiRx)
垢版 |
2021/09/30(木) 19:31:20.50ID:4/dpkDC70
>>220
多分ビット演算を知らないんだと思う
いずれにしてもバイナリごにょごにょはVBAには適さないとレス見てて改めて思った
0232デフォルトの名無しさん (ワッチョイ 12ad-zD50)
垢版 |
2021/09/30(木) 22:38:31.79ID:tyeheD170
for i=0 to 10
 if AAA(i) then Range("A1").offset(i,0)="OK"
next
↑こんな感じのfor文を書いたら普通に動いていたんだけど、

for i=0 to 10
 debug.print i, AAA(i)
 if AAA(i) then Range("A1").offset(i,0)="OK"
next
↑for文の中にdebug.printを入れたら、iが10になっても止まらず、
イミディエイトウィンドウ上に、「i, AAA(i)」の部分がずっとループして止まらなくなった。

こんなことってありえますか?
0233デフォルトの名無しさん (ワッチョイ de8c-ysz4)
垢版 |
2021/09/30(木) 23:00:52.63ID:sFWbYEj80
AAA(i) って中身はなんだ
0234デフォルトの名無しさん (ワッチョイ 1e68-wYsx)
垢版 |
2021/09/30(木) 23:03:17.67ID:50MfSZL40
>232
i=i-1

i=3
みたいにiが永久に10を超えない動作が入るとそうなる
0235デフォルトの名無しさん (ワッチョイ 0349-PXWQ)
垢版 |
2021/09/30(木) 23:04:37.72ID:Vp0fi7DV0
普通に動いていると思っていただけで元々普通に動いてなかったとかはある
こんな感じのって言ってるから、そのソースそのまま受け取るわけには
いかんのだろうなって思った
0237デフォルトの名無しさん (ワッチョイ de8c-ysz4)
垢版 |
2021/09/30(木) 23:22:00.84ID:sFWbYEj80
>>232 >>234
Function AAA(ByRef i As Variant) As Boolean
i = 3
AAA=True
End Function

こんな感じのじゃない?
0238232 (ワッチョイ ffad-2jfQ)
垢版 |
2021/10/01(金) 00:46:48.32ID:85aYXoDy0
AAAはリストボックスです。
わかりにくかったので、listAとします。
中身はTRUEかFALSEです。

listA.list(0)がTRUEなら、A1セルにOKを入力
listA.list(1)がFALSEなら何もしない。
listA.list(2)がTRUEなら、A3セルにOKを入力

という処理でした。
debug.printを入れる前に動かした時は、画面が固まることもなく正常に終了しました。
debug.printを入れた後に動かしたらループが止まらなくなりました。

debug.printで出力されたiは、0→1→…→9→10→0→1→…というループではなくて、
0→1→…→9→10→6→7→8→9→10→6→…→10→6→…というループでした。

「debug.print i」がiの値に影響を与える、ということはないですもんね。
他の部分を明日あらためて確認してみます。
ありがとうございました。
0242デフォルトの名無しさん (ワッチョイ 6f68-UmxQ)
垢版 |
2021/10/01(金) 19:45:19.68ID:3/37uweO0
>>239
メソッドとプロパティが一箇所に集まって可視化しやすくなる
でもvbaのクラスは貧弱過ぎるので、モジュールで分けるのと大差ないという
0243デフォルトの名無しさん (ワッチョイ 8301-8myK)
垢版 |
2021/10/01(金) 19:47:27.08ID:4jCtmjal0
>>239
色々あるが、VBAのクラス機能はゴミなのでマジで自己満が多いと思う
解説サイトで玄人の技・隠し機能みたいなノリで紹介されてるので、使えるとプロっぽく見える。

@イベントやデフォルトメンバーみたいなオブジェクトモジュール専用の機能が使える
イベントをまとめたいとかで、仕方なしに、これ目的で使ってる人が多いと思う

A変数に値を入れて、その変数を色んな関数の引数にするっていう事が多々あるけど、
そういう「変数と関数」が常にペアになっているなら纏めた方が分かりやすい

B標準モジュールではモジュールレベルで宣言した変数は実行中保存される。
なので、ある関数でモジュールレベルの変数に値を保存して、別の関数で再利用みたいな使い方が出来る。
でも標準モジュールだと当然その変数に保存できる値は一つなので使い勝手が悪い。
クラスモジュールならインスタンスごとに別の値を保存できる
0246デフォルトの名無しさん (ワッチョイ f35f-ZUrU)
垢版 |
2021/10/01(金) 20:12:23.33ID:HK8CLsAI0
ただ単にすっきりして可読性がよい
クラスにしてると他人のコード化したときに何をしてるかもう一度把握するのが容易
自分でメソッドやプロパティを作るとファイルシステムオブジェクトやコレクションを扱い易くなる
0247デフォルトの名無しさん (ワッチョイ 8301-8myK)
垢版 |
2021/10/01(金) 20:33:12.85ID:4jCtmjal0
JSとかと違ってモジュール内に構文で記述できない(単体のモジュールファイルとしてしか書けない)から、
クラスモジュールを書くこと自体が億劫に感じて余り印象よくないわ
プロジェクト内だとどこからでも呼び出せるから、どこでどう使われてるのかサッパリだし

イベント機能とか状態保存を有効に使いたい、コレクションを自作したい、
みたいな特別な理由がない限り使わない方がいいんじゃないかなぁと思ってる
0249デフォルトの名無しさん (ワッチョイ 8301-8myK)
垢版 |
2021/10/01(金) 20:53:23.76ID:4jCtmjal0
>>248
Initializeはコンストラクタじゃなくてイベントだから、
仮に引数があってもオブジェクトモジュール内じゃないと使えない上に、
インスタンスごとにイベントハンドラ用のモジュールレベル変数が必要になって面倒だと思う
0254デフォルトの名無しさん (ワッチョイ 8301-8myK)
垢版 |
2021/10/01(金) 22:24:35.99ID:4jCtmjal0
>>252
何をどう解釈したのか言ってくれれば対応できるけど、最早返答が意味不明過ぎるんだわ
何に対して「イベントに引数渡せる言語はいくらでもあるのに何を言ってるんだ?w」と疑問が沸いたのか説明して?
0255デフォルトの名無しさん (ワッチョイ 8301-8myK)
垢版 |
2021/10/01(金) 22:34:31.13ID:4jCtmjal0
>>252
あと、VBAのクラスに「引数が付いたコンストラクタが欲しいな」っていう希望から
「Initializeに引数を持てるようにして欲しかった」っていう要望が出たのは明白だろう

で、イベントに引数を渡すのは面倒だよねって話をしたら「コンストラクタにすればいい」ってのもよくわからん。
だったらイベント関係なしに、初めから使いやすいコンストラクタ相当の言語機能が定義されてた方がいいだろう
0256デフォルトの名無しさん (ワッチョイ ff4f-P/uO)
垢版 |
2021/10/01(金) 22:55:44.73ID:f1R1MoFX0
一般のObject指向言語で言うところの継承が使えないとか色々あるから普通にデザインパターンを考慮して作ろうとするとそこそこ制限受けるよね。

例えば継承が使えないからテンプレートメソッドパターンが使えないとか、

VB.Netで言うSharedが使えないからキチンとシングルトンパターン使おうとすると結構厄介だったりとか。

インターフェースが使えるから継承の代わりにストラテジーパターンでも使って組もうとか考えても限界あるし。

あ?コンストラクタに引数?
そんなのは初期化用のメソッド作って呼びゃいいだろうと俺は思うけどね。

まあでもそういうのに頭使って組むからVBAは面白いんだと思うよ。
他のObject指向言語やってる人って結構インターフェースの概念を疎かにしたりするしね。
0257デフォルトの名無しさん (ワッチョイ b32f-/JM3)
垢版 |
2021/10/02(土) 02:59:35.03ID:xagjL2JO0
イベントに引数渡す(というか受け取る)のは別に面倒でもなんでないから
コンストラクタの引数をInitializeイベントに渡せたらまあそれもいいんだが
VBAだとInitializeイベントがオーバーロードできないからなぁ

まあもともとのVBがオブジェクト指向でもなんでもなかったとこからスタートしてるからな

俺はVBAのクラスは自作イベント使いたいときに使うものと思ってる
0259デフォルトの名無しさん (ドコグロ MMa7-E/uf)
垢版 |
2021/10/02(土) 06:08:02.24ID:g1EUYVpxM
>>256
> あ?コンストラクタに引数?
> そんなのは初期化用のメソッド作って呼びゃいいだろうと俺は思うけどね。
> まあでもそういうのに頭使って組むからVBAは面白いんだと思うよ。
そういうのは頭使うとは言わない
単に面倒(かつバグの元)なだけ
無い物ねだりすんなと言うならわかるけど
0260デフォルトの名無しさん (ワッチョイ b3e6-SE+q)
垢版 |
2021/10/02(土) 07:21:09.62ID:f83gGEH/0
VB7を待て!
0261デフォルトの名無しさん (ワッチョイ ff4f-P/uO)
垢版 |
2021/10/02(土) 07:44:35.99ID:PmOXqFk20
>>259
言ってる意味が分からない。
生成した後初期化用のメソッド呼ぶだけだろ?
なんでそんなのが面倒でバグの元になるんだ?
お前はそんな程度でバグを生むソースを書くのか?
0262デフォルトの名無しさん (ワッチョイ 6f68-UmxQ)
垢版 |
2021/10/02(土) 07:49:32.43ID:i6pQYLUQ0
それ言い出すとどんな言語でも「だけ」になるぞ
0263デフォルトの名無しさん (ワッチョイ ff4f-P/uO)
垢版 |
2021/10/02(土) 07:52:52.17ID:PmOXqFk20
それにポリモーフィズムを理解している奴ならむしろバグやUTケースを減らせるコードが書ける。
でなければObject指向なんてここまで浸透しなかっただろうよ。
0273デフォルトの名無しさん (ワッチョイ 6f68-UmxQ)
垢版 |
2021/10/02(土) 17:44:59.50ID:i6pQYLUQ0
>>264
クラスにコンストラクタがない
→newの後にメソッドなりで中身かえればいい「だけ」

それを言い出すとクラスそのものもなくてもどうにでもできるだろって話になる
そうじゃなくて、そんなめんどくさいことを「今更」したくないって話なんだ

それが苦にならないor自分で既にそれらを自動化するライブラリがある!ってなら問題ないと思うよ
君の言ってる事は間違いではない。単に感覚の違いだ


ただ、俺はやだなぁ
ついでに言うとarrayにpushはマジで欲しい
0275デフォルトの名無しさん (ワッチョイ b32f-slNU)
垢版 |
2021/10/02(土) 18:23:04.84ID:xagjL2JO0
>>263
ちゃんとしたオブジェクト指向言語使えば減らせるってならともかく
VBAでオブジェクト指向でやってUTケース減らせると思えんが

ちょっとVBA関係ない話になるが
お前の思うポリモーフィズムと引数付きコンストラクタの使いどころ教えてくれ
0279デフォルトの名無しさん (ワッチョイ ff4f-P/uO)
垢版 |
2021/10/02(土) 21:28:02.67ID:PmOXqFk20
>>275
そうだな、ちょっとその前に
例えば一つの例としてゲームを作ったとしよう。
それは簡単なシューティングゲームだったとして、
キャラクターの中に自機、弾、敵、ヒットマークがあったとする。
キャラクター数の上限は考えないものとし、敵は幾つか種類がいるものとして、ひとつは地形判定を行う、一つは弾を打つ、等の違いがあった場合、
君ならどう作るか聞いてもいいかな?

質問を質問で返すようなことするなと言っておいて悪いが最初に認識を合わせるために聞いておきたい。
0280デフォルトの名無しさん (ワッチョイ ff4f-P/uO)
垢版 |
2021/10/02(土) 21:48:51.07ID:PmOXqFk20
>>273
そもそも論として、クラスを使わなければ何か出来ないことがあるかと言われれば、それはあまり思い付かない。
ただ、VBAでクラスのコンストラクタに引数を持ってないという程度であればそれで代用が効くだろうという話。
それも面倒だというのであれば、クラスを生成して初期化するメソッドを作ってそれに引数を持たせるようにして呼び出せばいくつそういう場所があっても一回書いておけばいいということになる。
0281デフォルトの名無しさん (ワッチョイ b32f-slNU)
垢版 |
2021/10/03(日) 05:20:08.91ID:fyf/YlYy0
>>279
認識あわせの例がシューティングゲームとかその時点でお前とは合わんわ
シューティングゲームとか作らんし、その想定でどう作るとか言われてもな
まあ一から全部作ることはないし、何らかのフレームワークに従って作るんじゃね
そんな細かい実装的な話を聞きたいんじゃないんだよ
0283デフォルトの名無しさん (ワッチョイ 6f8c-GArm)
垢版 |
2021/10/03(日) 11:58:59.58ID:Lx3l1CXP0
ガンダムで例えてくれ
0284デフォルトの名無しさん (ワッチョイ cfda-vizG)
垢版 |
2021/10/03(日) 12:18:23.19ID:PztuncMq0
坊やだからさ
0285デフォルトの名無しさん (アウアウウー Sa27-jOtc)
垢版 |
2021/10/03(日) 12:51:23.55ID:oCTMWA/sa
excel+vbaでマインスイーパーは造れますか?
どこかにソースありますか?
0288デフォルトの名無しさん (ワッチョイ e301-QRk2)
垢版 |
2021/10/03(日) 22:35:03.42ID:x8fdTISD0
教えて下さい
ガンチャート形式の日程表で
日付の色塗りだけじゃなくて
タスク表示(その日の予定)もさせたいんだけど
どう関数組んだらいい?
0289デフォルトの名無しさん (ワッチョイ f35f-1D0T)
垢版 |
2021/10/03(日) 23:22:18.21ID:VDfIFkhd0
>>288
ガントチャート形式の日程表とやらの構成はどうなっている?
日付の色塗りとは、何を指している?
タスク表示とは、タスク名?をどこに表示させることを言っている?

このへん予め提示しないと解決が長引くよ
0291デフォルトの名無しさん (ワッチョイ 6f8c-GArm)
垢版 |
2021/10/04(月) 01:17:19.95ID:BaE5qGe00
excel ガントチャート フリーで検索
0292デフォルトの名無しさん (ワッチョイ 435f-P/uO)
垢版 |
2021/10/04(月) 09:25:56.63ID:dlhTdODc0
質問失礼します
タイマーで二つのマクロを順番に実行したいのですが
ひとつめのマクロ実行が長引いてしまい
マクロ実行中にApplication.OnTimeのcallで次のマクロが動くとエラーになってしまいます
Application.OnTimeの時間になっても前のマクロが終わるまで待つやぶつからなくする方法はあるでしょうか?
0293デフォルトの名無しさん (ワッチョイ ff4f-P/uO)
垢版 |
2021/10/04(月) 09:37:56.41ID:X/RNGavO0
>>292
へ?
ひとつ目の実行開始時に処理中フラグ立てて
実行終了時に倒すようにして
それ見て二つ目のマクロの処理を飛ばすか
待たせてまた実行するかすればいいんじゃないの?
聞いてる意味違う?
0294292 (ワッチョイ 435f-P/uO)
垢版 |
2021/10/04(月) 10:15:29.97ID:dlhTdODc0
>>293
はいあっています
処理中のフラグでぐぐると色々出てきました
困っていたので助かりました
ありがとうございます
0297デフォルトの名無しさん (ワッチョイ ff4f-P/uO)
垢版 |
2021/10/04(月) 12:54:51.17ID:X/RNGavO0
>>296
そうね。
ただVBAのクラスは1クラス1モジュール使ってしまうのと、クラスが格納されているフォルダが一階層しか使えないからネーミングに気を付けて後でそれがそういう意味を持つクラスだって分かるようにしておかないとね。

後、あれやこれやと引数のクラス作らなくても、引数として格納する変数が一意でいい場合は標準モジュールでも同じように作れば使えるよ。

ただしこの場合は引数として渡すんじゃなくてその標準モジュール側に作ったプロパティを直接読みに行くことになるけどね。まぁ使い分けだね。
0298デフォルトの名無しさん (ワッチョイ bf3d-kB/c)
垢版 |
2021/10/04(月) 13:39:00.82ID:1MgeDxIh0
マクロを実行させると、Excelが落ちてしまい、
ステップ実行させるとマクロが正常終了orExcelが落ちない
ていう事になってるんだが、
どこで異常終了してるか調べる方法ある?
0301デフォルトの名無しさん (ワッチョイ bf3d-kB/c)
垢版 |
2021/10/04(月) 14:13:00.80ID:1MgeDxIh0
>>299,300
ブレイクポイントを貼ると落ちない。
なんとなくやばい場所は分かってるんだけど、on errorでもcatchできないんだよな。
やってることは、 uiautomationを使ってコンボボックス叩く(Expand)てことやってるんだが、
おそらくその行で落ちるんだが、
落ちずに成功する場合もあるんだよな。
0302デフォルトの名無しさん (ワッチョイ cf68-2jfQ)
垢版 |
2021/10/04(月) 14:34:03.70ID:AbV0YbaI0
>>301
WinAPIで似たような事があった
本来待ち時間が必要な処理を待たずに次へ行くからブレイクポイント無しだと落ちるってケースね
怪しい所にSleep関数使って500ミリ秒待たせたら落ちなくなった事があるよ
0303デフォルトの名無しさん (ワッチョイ bf3d-kB/c)
垢版 |
2021/10/04(月) 15:02:49.67ID:1MgeDxIh0
298です。
いろいろ試してみると、マクロを実行じゃなくてステップインボタン押してF5で実行させると落ちない事がわかった。
ならば、待ち時間の問題かと思って、sleepとかDoEventsを入れてみても、落ちる。
今の所唯一の回避策がステップイン+F5だな。
ググるとステップインだとうまくいくていう記事は散見されるが、合理的な説明はない。
0306デフォルトの名無しさん (アウアウウー Sa27-1D0T)
垢版 |
2021/10/04(月) 19:42:11.08ID:2sXWsmVMa
ワークブック開きすぎ(それも容量やシートが多すぎ)や、複数アプリケーション開きながらマクロ動かすと遅くなるからそういうところからも気をつけるといいかもしれない事例
0307デフォルトの名無しさん (ワッチョイ ff4f-P/uO)
垢版 |
2021/10/04(月) 20:35:24.21ID:X/RNGavO0
>>303
当たりをつけるというフィジカルな部分ももちろん大事だけれど、本当に自分が当たりをつけたところが原因なのか切り分けを行った方がいいね。

その為にもどこで落ちているかを確定するのが一番先にやることだよね。やっぱりLogをtxtファイルか何かに出力するのが遠回りになるようで一番近道かもしれないよ。
箇所箇所で吐き出すロジック組み込んで、毎回書き込んでセーブしておけばどこで途切れたかで分かると思うからそれで絞り込んでどの命令で落ちたかを確定出来れば儲けもの。

もっとも、都度落ちる箇所が違う場合もあるかもだろうけど、そうなったらそうなったでそれから当たりをつけて調べればいいのであって、まず落ちている箇所が特定出来れば原因もある程度絞れるよね。
0310デフォルトの名無しさん (ワッチョイ e38e-6V0L)
垢版 |
2021/10/05(火) 00:51:53.00ID:AqVIusQn0
>>296
お前の知能が足りなくてアウアウしてるだけだろ
0311デフォルトの名無しさん (アウアウキー Sa87-Kp1k)
垢版 |
2021/10/05(火) 15:40:04.36ID:dJ3N05Swa
ちょっと教えてください
コントロール上にマルチページ「Multipage1」があるとき、下を実行するとエラーが出るんですが、何故か分からんのです

Private Sub UserForm_Initialize()
Dim buf As String
buf = "D3"
Set MP = MultiPage1
MP.Pages.Add
MP.Pages("Page3").Name = buf
MP.Pages(buf).Name = "X3" ←ここ。「13:型が一致しません」
End Sub
0317デフォルトの名無しさん (アウアウキー Sa87-Kp1k)
垢版 |
2021/10/05(火) 16:21:29.24ID:dJ3N05Swa
>>316
や、たぶん関係するっぽいですかね?
こちらオプション無し、宣言は無しまたはas objectだとダメでas multipageだと通った
0323デフォルトの名無しさん (ワッチョイ b32f-slNU)
垢版 |
2021/10/05(火) 21:37:47.06ID:LdUtAYwX0
Pagesの引数に変数渡すと数字として解釈しようとしてるっぽいな
buf = "2" とかにするとIndex=2のページを参照してるようだ
文字列リテラルならちゃんと名称として解釈してるっぽい
ちな365の64ビット

これ以上はサポートにでも問い合わせるしかねぇんじゃね
0324デフォルトの名無しさん (アウアウウー Sa27-4HLA)
垢版 |
2021/10/07(木) 18:28:58.89ID:p9itA/YXa
マクロの記録機能使ってマクロの作成したいんだがピボットテーブルのプルダウンから任意の値だけを抜き出すのってどうやってやればいいの?

毎回モジュール見直すとvisible farceになってて要するに抜き出したいもの以外を表示しないようにしてる構文て事だよね?
こうなると仮に次回このマクロを使う時にvisible farceになってない値が新しく出てくるとそれも表示されちゃうって事だよね?
じゃなくていくら値が増えても決められた値だけを抜き出すように作りたいんだ
どなたか教えて下さい
0327デフォルトの名無しさん (ワッチョイ 435f-nDZW)
垢版 |
2021/10/07(木) 21:29:48.70ID:AykPZAFh0
ActiveSheet.PivotTables("ぴぼっとてーぶる").PivotFields("ふぃーるど").ClearAllFilters
ActiveSheet.PivotTables("ぴぼっとてーぶる").PivotFields("ふぃーるど").PivotFilters.Add Type:=xlCaptionEquals, Value1:="表示したいもの"
0329デフォルトの名無しさん (アウアウキー Sacb-h0Ad)
垢版 |
2021/10/08(金) 00:17:45.54ID:sJT5Ti/qa
うちの職場は適当にvbaでつくったやつをちゃんとしたアプリに置き換えてるよ
0330デフォルトの名無しさん (ワッチョイ cb01-VEx9)
垢版 |
2021/10/08(金) 00:31:33.80ID:GXvDbP/z0
アプリだろうがvbaだろうが作った人間がやめたらメンテできなくて終わるんじゃないの
開発者が大勢いるようなレアな職場ならともかく
vba使ってるところなんてたいてい事務で
エクセル職人が少数いるだけだろ
0335デフォルトの名無しさん (アウアウウー Sa2f-YkK2)
垢版 |
2021/10/08(金) 08:09:49.53ID:Am1Ugnvua
>>326
>>327
丁寧にありがとう
色々試してみます
0336デフォルトの名無しさん (ワッチョイ 8a05-GJBa)
垢版 |
2021/10/08(金) 09:40:27.58ID:JQJjKarL0
CPU使用率が大きかったのでダメもとで開いて修復を実行したら
かなり軽くなるのな、知らんかった
これ定期的にやったほうがいいのか?
VBAのコードを一旦退避させるのが面倒だが...
0339デフォルトの名無しさん (ワッチョイ b301-A6QN)
垢版 |
2021/10/09(土) 01:49:50.17ID:98oBjVW70
自分が初めてVBAを使って解決した時点で、他にVBAを使う人がいないんだから属人化しないわけがないと思うけどな
しかもVBAってプログラミング言語の中では非常に初心者向けなわけで、
誰もVBAで組めない=プログラミングに全員疎いのはほぼ決定なんだから尚更さ

VBAを共通知識にしたいっていうのは、
最初にプログラミングっていう一般的には取っ付き難い物に興味を持たせるっていう途轍もなく大きなハードルを超える必要があって、
それは「興味がある生徒に教える」プログラミング講師以上に難しいと思う

相当な根気が必要だと思うよ
0341デフォルトの名無しさん (ワッチョイ b301-A6QN)
垢版 |
2021/10/09(土) 02:30:43.66ID:98oBjVW70
確かに。
レス漁ってみたが、
ここでいう「属人化で困る」は「他の人にはできないVBAというテクニックを持つオレスゲー」を単にオブラートに包んだだけっぽい感じがするな
0342デフォルトの名無しさん (ワッチョイ cb01-VEx9)
垢版 |
2021/10/09(土) 02:49:32.47ID:0Qsp0NFP0
マクロの効率化ガン無視で社員の手が開いた分だけ仕事を割り振る上司がいるらしいけど
その時点である意味属人化してるよね
その仕事引き継ぐやつ
まずさばき切れないだろ
0343デフォルトの名無しさん (ワッチョイ 9eda-JSxF)
垢版 |
2021/10/09(土) 04:49:21.33ID:UCXjyRPA0
うちの職場ではほとんどの人がマクロできるけど、新人に自信持たせるためにわざわざ気を使って
「君マクロできるなんて凄いね〜」っておだててるのに同調するのが正直めんどくさい
0351デフォルトの名無しさん (ワッチョイ cb01-VEx9)
垢版 |
2021/10/09(土) 08:37:41.66ID:0Qsp0NFP0
そんな金あったら給料上げてレベルの高い人材雇うか
もうちょっとマシな専用ソフト使ってる
金をケチったせいでオンボロ専用ソフト使わせれて
専用ソフトじゃフォローしきれないのでエクセル活用しないと行けない羽目になってる
0352デフォルトの名無しさん (スフッ Sdea-JSxF)
垢版 |
2021/10/09(土) 08:57:09.18ID:g5OHjBNSd
会社は社員に楽させたいと思ってるわけじゃない、という大前提
人材なんて時間いっぱい、めいっぱい働かせてナンボ
安いアプリを買って、あとは社員にやらせて、それで回ってるなら何も問題ないんだよ
0363デフォルトの名無しさん (ササクッテロレ Sp03-+BSw)
垢版 |
2021/10/10(日) 06:43:03.77ID:LB6rENWtp
個人的に使いたい使いたくないは仕方がない
適材適所で最適解を出す手段に自ら縛りを掛けているだけだから
それで他の人に迷惑掛けている訳でなければとやかく言う筋合いでも無いしな
0369デフォルトの名無しさん (ブーイモ MM4f-Wbmm)
垢版 |
2021/10/10(日) 16:04:08.10ID:2USb7I2AM
>>368
あんまり関数でデータベース検索かけたくないけどかけなきゃいけないならXLOOKUP、自分以外が使う可能性があるならVLOOKUPかHLOOKUPかなぁ
状況に合わないならMATCHも使うけど使用優先度は低め

VBAにやらせる時も中に確実に存在する場合でなければRange型にFind使って放り込む事が多いかも
Is Nothingで見つからない場合でも処理が止まらずに弾けるし
0374デフォルトの名無しさん (ワッチョイ 0668-Mxyx)
垢版 |
2021/10/10(日) 17:53:50.05ID:19DRUExW0
>>372
削除を感知して、
https://kirinote.com/excelvba-row-event/

削除されていれば
appliction.undo
ってのはどうだろうか
0376デフォルトの名無しさん (ワッチョイ 9eda-h0Ad)
垢版 |
2021/10/10(日) 19:05:42.11ID:eL4HRu610
じゃあ、ゴミじゃない回答よろ
0377デフォルトの名無しさん (ワッチョイ 03d0-Oubo)
垢版 |
2021/10/10(日) 19:35:34.55ID:rFwRYXWV0
「削除できないように」というのが:
・「セルや行の削除をできないようにしたい」→シートの保護で対処
・「値の変更はできるが消去(空欄に)できないようにしたい」→入力規則で対処
0379372 (ワッチョイ 67da-JSxF)
垢版 |
2021/10/11(月) 00:26:21.39ID:Z2LLk70Q0
>>377
シートの保護で削除不可を選んでも全ての行が削除不可になること,またセルの内容変更もできなくなるので希望に合いません.
374さんのやり方をVBA画面をで書くしか無いですかね
0384デフォルトの名無しさん (ワッチョイ 0b8e-o/se)
垢版 |
2021/10/11(月) 21:18:23.92ID:oro4FUng0
馬鹿でもある程度作れてしまうからダメなんだよな
0387デフォルトの名無しさん (オッペケ Sr03-iuVz)
垢版 |
2021/10/14(木) 19:05:30.78ID:DEjpZ/5cr
メーカー開発設計だけど実験データ処理とかで
なれないながら頑張ってvba使ってるけど
試行錯誤で調べながらだからあんまりシート使ってるときと比べて効率化できてる気がしない…
でもシートでチマチマするよりは知的労働してる気がするし
いつかのペイオフを期待するわ
0389デフォルトの名無しさん (ワッチョイ 0668-Mxyx)
垢版 |
2021/10/14(木) 22:26:04.22ID:FxTzsGq40
set覚えてオブジェクトの概念覚えてイベントを理解してしばらくするとほぼ全ての場面で対応できるようになる
0390デフォルトの名無しさん (ワッチョイ 6b01-18WC)
垢版 |
2021/10/15(金) 06:17:54.01ID:YCIon6in0
色々覚えて余計な知識が付いてきて、
これはもっと綺麗に書けるんじゃないか?っていう欲が出て進まなくなる事が増えたんだけどどうすりゃいいのか
今までは明らかに冗長で読みづらいコードが多かったけど、生産性で見れば高かったように思う

特にプログラミング自体に興味が出てきて他の言語の記事も見るようになって、
そこで得た知識をVBAで無理に再現しようとしてドツボに嵌る事態も多いように感じる
0391デフォルトの名無しさん (ワッチョイ 9f4f-/GGz)
垢版 |
2021/10/15(金) 07:30:19.61ID:xvvRRo/+0
>>390
まず単一責任原則に沿って作るといいよ。
つらつらとコードを一直線に書くんじゃなくて、
役割に合わせてメソッドや関数を作って
それを部品として組み立てて行くイメージ。

後、他言語をやっていてクラスや
インターフェースの概念を理解しているなら
行き当たりばったりで最初からコードを
書くんじゃなくてどういう構成で組むかを
一度図に書いてイメージしてから作るといいよ。
そのためにもUMLとかもかじっておくと
いいんじゃないかな。

後は暇なときにデザインパターンの本でも
読んでおいて使えそうなのだけ
使えばいいんじゃないかな。

ただ、VBAでは自分一人で使うんであれば
それでいいけど、後々人が見たり手を入れたり
することを考えると、やり過ぎると
そもそもその辺の概念を理解していない
人が多いからね。自分以外誰も触れない
オナニーコードの完成だよ。
その辺は気を付けないとね。
0392デフォルトの名無しさん (ワッチョイ ef68-VjlT)
垢版 |
2021/10/15(金) 07:53:52.36ID:i1GdH9Fr0
>>390
字の練習と同じ
納得できるまで、何度も綺麗に書き直せば良い
その内、早く綺麗に掛けるようになる
「もう少し綺麗に書けそうだけど時間かかるから諦めよう」の判断も出来るようになる

>>391とは逆だけど、vbaの場合は関数やモジュールはあまり分けなくても大丈夫だよ
他の言語だと10行超えたら別モジュール、なんて言われる事もあるけど
vbaだと単一モジュール・単一関数で終わる方が見やすい事も
0394デフォルトの名無しさん (ラクッペペ MM7f-xEoX)
垢版 |
2021/10/15(金) 09:22:10.96ID:Y66b/sjXM
美しさより速さだよ
最初の頃は両立するが(無駄なSelectなど)
次第によ醜くなっていく
0395デフォルトの名無しさん (エムゾネ FFbf-mxW8)
垢版 |
2021/10/15(金) 10:10:42.08ID:Sjupi756F
もう3年くらいExcel使ってないけど全然困らないωωω
0398デフォルトの名無しさん (ワッチョイ 6b01-18WC)
垢版 |
2021/10/15(金) 21:42:47.27ID:YCIon6in0
>>391,392
ありがとう

分けた方がスッキリするんだけど、
分けすぎると逆に関数があっちこっちに分散してどれが何に使われているのか分かり辛くなる
そういう時に「どこまで分けるか」っていう塩梅はどういう基準で決めてる?
0399デフォルトの名無しさん (ワッチョイ 9f4f-/GGz)
垢版 |
2021/10/15(金) 22:02:32.86ID:xvvRRo/+0
>>398
役割。
モジュールもメソッドも全てに役割分担を持たせてキチンと仕舞うべき場所に仕舞っておく。
だからその役割を行う為なら100行になろうが1000行になろうがそのメソッドに記載する。

何を持ってしてひとつの役割とするかは作る人のセンスに掛かってくるから場数をこなして慣れるしかないかな。
0401デフォルトの名無しさん (ワッチョイ ab5f-UsRe)
垢版 |
2021/10/16(土) 13:55:14.29ID:Hx8OP0An0
>>398
> 分けすぎると逆に関数があっちこっちに分散してどれが何に使われているのか分かり辛くなる
関数にカーソル合わせて「Shift+F2」で定義箇所に飛べるよ
https://www.wordvbalab.com/code/2925/

まあ言語自体も開発環境も貧弱すぎるからまとめたくなっちゃう感覚はわかるけど
0402デフォルトの名無しさん (ワッチョイ 6b01-Avck)
垢版 |
2021/10/16(土) 16:39:05.71ID:EZGI4ZK10
調べてもわからないのでお聞きしたいです

下の処理でtest3まで処理は正常に行われるんですが
mainに戻ったときに型の不一致でエラーが出て止まってしまいます。

Dim WS As Worksheet

Sub main()
Call test3(TEMP_SHEET)
End Sub

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

Function test3() As Variant
With WS
.Select
.Cells(1, 1) = "test"
End With
End Function
0407デフォルトの名無しさん (ブーイモ MM4f-ZO17)
垢版 |
2021/10/16(土) 17:43:21.23ID:nAOL9IkjM
>>402
そもそも「test3までは正常」というのが間違い
これではまったく動かない

とりあえず動くようにするなら、たとえばこう書けばいい
ほかにも色々なパターンが考えられるけど、何がやりたいのかよくわからないので

Dim WS As Worksheet

Sub main()
  Call TEMP_SHEET
  Call test3
End Sub

Sub TEMP_SHEET()
  Set WS = ThisWorkbook.Worksheets("temp")
End Sub

Sub test3()
  With WS
    .Select
    .Cells(1, 1) = "test"
  End With
End Sub
0411デフォルトの名無しさん (ワッチョイ 6b01-Avck)
垢版 |
2021/10/16(土) 18:57:45.79ID:EZGI4ZK10
ありがとうございます!
test3はsubでよかったんですね。
参考にしながらいろいろ試したらできました。
すごく助かりました。
0412デフォルトの名無しさん (ワッチョイ fb2f-4HJo)
垢版 |
2021/10/16(土) 19:30:00.02ID:m1u7MgLp0
いや、問題はSubかFunctionかじゃないんだが
FunctionをCallしても、戻り値が捨てられるだけで別に問題はないぞ
名前の付け方がまあアレだが

Dim WS As Worksheet の行消して

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

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

とかで動くだろ
0413デフォルトの名無しさん (ワッチョイ 6b01-Avck)
垢版 |
2021/10/16(土) 20:00:16.92ID:EZGI4ZK10
>>412
ありがとうございます。すごく勉強になりました。
0415デフォルトの名無しさん (ワッチョイ 4b68-ZO17)
垢版 |
2021/10/16(土) 21:32:26.89ID:a6cW1Kja0
分けたくなったら分ければいい

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

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

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

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

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

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

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

VBAで出来ることはわかったのでダイマでもステマでもいいのでオススメの書籍を教えてください
0427デフォルトの名無しさん (ワッチョイ 2bb1-SdPo)
垢版 |
2021/10/17(日) 13:08:15.77ID:LVwZEVKT0
ルビースレってそもそもなんなのかって状態なんだが…
この板はブラウザバックで二重投稿した程度で中傷くらったりするのか?
エクセルのVBAについて質問してるのに全然違う答え返ってくるし
0430デフォルトの名無しさん (ワッチョイ 2b10-8HLh)
垢版 |
2021/10/17(日) 15:24:33.87ID:rQoWwir60
>>425
B1の項目に従ってというのが謎なので気を利かせて絶対パスで指定のファイルを開くようにしたよ。
ちなみに5ちゃんに書くとファイルパスの¥マーク書けないから半角に直してね。

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

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

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


Sub test()

Gyo = Selection.Row

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

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

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

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

Workbooks(Namae1).Close

End Sub
0433デフォルトの名無しさん (ドコグロ MMcf-ORg4)
垢版 |
2021/10/17(日) 16:11:59.85ID:lULOB+dMM
>>430
> Workbooks.Open "C:\Users\*****.xlsx"
> Workbooks("*****.xlsx").SaveAs Filename:=Namae0
> Workbooks(Namae1).Close
こんなふうに書く人いるけどなんで
Dim Book As Workbook
Set Book = Workbooks.Open("C:\Users\*****.xlsx")
Book.SaveAs Filename:=Namae0
Book.Close
って書かないのか不思議だ
0434デフォルトの名無しさん (ワッチョイ ef68-VjlT)
垢版 |
2021/10/17(日) 19:08:06.14ID:F19IWtWk0
>>433
単に返り値がopenしたbookであることを知らないだけだと思う
俺も昔は前者みたいな書き方してたな
0443デフォルトの名無しさん (ワッチョイ ef68-VjlT)
垢版 |
2021/10/17(日) 22:22:04.64ID:F19IWtWk0
withはネストするとトタンに見にくくなるよね
>>437ぐらいなら見やすいと思うけど、>>439と完全に同意見だわ
0444デフォルトの名無しさん (ワッチョイ 9f4f-/GGz)
垢版 |
2021/10/18(月) 00:37:42.11ID:48un5MBo0
以前VB6スレでもWith Newを使ってる人がいて論議になったことがあったね。

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

ただこの方法であまり長いロジックを組むのは確かに可読性に宜しくないのも同意。
だから使いどころに気をつけながら使う方法だと思うよ。
0449デフォルトの名無しさん (アウアウウー Sacf-8a12)
垢版 |
2021/10/19(火) 05:36:51.83ID:s00hPK6/a
クリックする
0454デフォルトの名無しさん (ワッチョイ 9fe6-HhMZ)
垢版 |
2021/10/19(火) 16:32:01.94ID:wN2ah2c70
全くの初心者です

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

検索してみてそれっぽいコードを実行してみましたが上手く行かないか1004のエラーが出てしまうので、できれば教えていただきたいです
0456デフォルトの名無しさん (ブーイモ MM7f-W6vP)
垢版 |
2021/10/19(火) 17:40:33.12ID:mCqSTcWyM
>>454
流石にエスパーじゃないからそれだけの情報じゃなんとも言えんが、
ファイルの指定が間違ってる可能性がありそう
エラーが出たときにデバッグってボタン押したらどんな命令文の背景が変わってる?
省略しないでその文を一字一句違わず書いてみ?
0457デフォルトの名無しさん (ワッチョイ 2b8e-ToKj)
垢版 |
2021/10/19(火) 18:02:38.90ID:ukSaGu280
実行してるファイルと同じ名前はダメだろ
0459デフォルトの名無しさん (アウアウウー Sacf-8a12)
垢版 |
2021/10/20(水) 00:29:04.94ID:P5tYW80ga
質問者の勘違いとエスパーしたんじゃね
0462デフォルトの名無しさん (ワッチョイ 9f02-Avck)
垢版 |
2021/10/20(水) 00:53:24.04ID:VLQwVQRS0
なぜプログラム板でExcelVBAのスレが活発なのよ?
日本終わってんな
0467デフォルトの名無しさん (ワッチョイ 9fe6-HhMZ)
垢版 |
2021/10/20(水) 17:58:56.42ID:DdoeWcxm0
>>456
https://lilia-study.com/excel/vba-sample/cellvalue-save/


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

Set wb = ThisWorkbook
Set ws = ActiveSheet

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

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

このvbaで
A1=A2にして、hozonPathをThisWorkbook.Pathにしたりすればできるかな?と思ったのですが上手く行かずです…
0470デフォルトの名無しさん (ワッチョイ fb2f-4HJo)
垢版 |
2021/10/20(水) 20:45:15.20ID:Es2OjjC60
>>467
お前のPCにK:ドライブは存在するのか?
とりあえず
wb.SaveAs のまえに、
MsgBox hozonPath & FolName & “\” & FilName
いれて、表示された内容をかけ

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

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

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

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

Sub シート作成()
For Each 支店名 In Worksheets("支店一覧").Range("A2:A18")
0474471 (ワッチョイ efda-KUiw)
垢版 |
2021/10/20(水) 22:41:41.27ID:mCILNp7G0
>>473
大変失礼いたしました
あるページからコードをコピーしてきたときに修正し忘れました
実際は名前→支店名にしていましたが、エラーとなっていました
エラーの内容の詳細が必要でしたら、明日投稿します
(現在手元にExcelファイルがなく、すみません)
0477デフォルトの名無しさん (ワッチョイ ef68-KUiw)
垢版 |
2021/10/21(木) 06:18:01.89ID:8cr/BFDG0
>>471
あと、
・どこで
・どんな
エラーになるのか書いて
0480デフォルトの名無しさん (ドコグロ MMcf-ORg4)
垢版 |
2021/10/21(木) 07:46:09.23ID:Ue09v+2oM
>>478
> Select Caseにbreakがないのは何故なんでしょうか
そういう仕様だから
Pascal とかと同じ

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

> 仕事で大きなトラブルを起こしてしまった…
仕事で使うならちゃんとテストしろよ…
0482デフォルトの名無しさん (ワッチョイ 9f4f-PJ2o)
垢版 |
2021/10/21(木) 11:14:41.56ID:kxdLHT3P0
>>478
これはVBAとかCase文に限らず今自分がやってる言語→ 他言語に切り替える際には何か違う挙動するなー、て言うのはあるあるなことだからまぁいい勉強になったって思うべきだね。

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

その言語仕様を嘆くよりそういったこともあるって次回に生かした方が幸せになれると思うよ。
0486デフォルトの名無しさん (ワッチョイ 2b8e-g8Px)
垢版 |
2021/10/21(木) 21:55:14.75ID:fbrP1i9b0
>>484
お前みたいな馬鹿にはVBAは無理だと思うよ
0487デフォルトの名無しさん (ワッチョイ ef68-KUiw)
垢版 |
2021/10/21(木) 22:14:08.48ID:8cr/BFDG0
>>484
最強料理はケバブ
0488デフォルトの名無しさん (ワッチョイ ef68-KUiw)
垢版 |
2021/10/21(木) 22:16:16.48ID:8cr/BFDG0
コピペ間違えた

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


あと
FolderName
を無理に
FolName
と変に略すと、あとで何書いてるかわからなくなるぞ。
0489デフォルトの名無しさん (ワッチョイ 0f2c-4HJo)
垢版 |
2021/10/21(木) 23:15:26.60ID:5CobycYg0
パス区切りに、/ は使えないの?

例えば、Ruby なら、

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

p Dir.glob( glob_pattern )

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

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

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

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

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

wb.SaveAs Filename:=hozonPath & FolName & "\" & FilName
0496デフォルトの名無しさん (ワッチョイ 05e5-NSZO)
垢版 |
2021/10/22(金) 09:34:10.25ID:EjatPKif0
>>495
Windowsの設定(コンパネ)のプリンタで用紙設定しておく
0498デフォルトの名無しさん (アウアウウー Sa45-Iznz)
垢版 |
2021/10/22(金) 19:20:10.02ID:eWxCtPi7a
横1列に並んだセルを
A B C D E F
1 あああ いいい ううう 阿嗚呼 伊井伊 雨右鵜
2 かかか ききき くくく 可化歌 機器機 久々九
3

A B C
1 あああ いいい ううう
2 阿嗚呼 伊井伊 雨右鵜
3 かかか ききき くくく
4 可化歌 機器機 久々九
のように1行飛びに成形するにはどうしたら良いですか?
0503>>498 (アウアウウー Sa45-Iznz)
垢版 |
2021/10/22(金) 22:34:54.56ID:0NScRLlYa
>>499
現状頑張ってコピってます
>>500
ありがとうございます
もちろんDBから引っ張って来たシートとは
別の印刷用シートのセルに=で参照させるんですが・・
マクロの記録を頼りにしてみます
>>501
自力で・・
0504デフォルトの名無しさん (ワッチョイ 895f-UBLL)
垢版 |
2021/10/22(金) 22:59:58.93ID:4e59Jt0n0
関数でできる
Sheet1のデータをSheet2に出力するとして、Sheet2のA1に次の式を入力してコピペ
「Sheet1!$A$1:$F$999」は範囲なので適当に直して

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

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

Range("A1:F3").ClearContents

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

End Sub

'クラスモジュール側(Class1)
Public value1 As String
Public value2 As String
Public value3 As String
0507デフォルトの名無しさん (ワッチョイ 3901-zxp6)
垢版 |
2021/10/22(金) 23:21:55.85ID:MBOrFbAX0
>>503
というか、普通に手作業でやってる手順をVBAで書き下せばいいだけだよ

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

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

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

type MatrixIndex
Row as long
Col as long
end type
dim src as MatrixIndex,dst as MatrixIndex
0508デフォルトの名無しさん (アウアウウー Sa45-Iznz)
垢版 |
2021/10/22(金) 23:34:57.82ID:MCKX1YxAa
>>504
偶数奇数の数列ですね!ありがたやー
>>505
んー データシートの消し込みって一般常識なんですかね?
まっコメントアウトするだけだし
 iとjが逆かな? でもなんとかなりそう!
ありがとうございましたア!
0510デフォルトの名無しさん (ワッチョイ e98e-Ti9O)
垢版 |
2021/10/23(土) 02:07:03.33ID:3lNDidpi0
いつものあいつ
0511デフォルトの名無しさん (ワッチョイ 068c-fL9+)
垢版 |
2021/10/24(日) 01:40:51.53ID:BvAAjUlj0
>>498
G列に上から1,2と入れて、さらに下方のデータの無いG列に1,2とコピペする
表全体を選択してフィルターを適用。G列でソートする
以上で一行ごとに空行が挿入される
つづいてD1:F2を選択、コピー
A2に形式を選択して貼り付け(空白を無視する)
出来上がり
0513デフォルトの名無しさん (ワッチョイ 05da-WU2P)
垢版 |
2021/10/24(日) 10:50:30.38ID:m64p+skw0
VBAで作ったプロシジャーにショートカットキーを割当てたのですがうまくいきません。
議論用に下のような簡単なプロシジャーをつくり(実際はもっと複雑です)
testShortCutKeyにはCtr+Shift+I
testShortCutKey02にはCtr+Shift+F
を割り当てました。

エクセルのウインドウをアクティブにした状態で
Ctr+Shift+Fを押すと別のアプリのEverNoteがアクティブになり
Ctr+Shift+Iを押すと別のアプリがアクティブになります。
ワードのVBAでも同じくショートカットキーを正しく設定しているのに使えません。

少なくとも今年前半はこんなことはなかったのですが…。
対策はあるでしょうか?

Sub testShortCutKey()
Stop
End Sub

Sub testShortCutKey02()
Stop
End Sub

https://imgur.com/S9WxsoT
0515デフォルトの名無しさん (ワッチョイ 02a5-iXiw)
垢版 |
2021/10/24(日) 12:20:50.22ID:LZG5kY/b0
普段よく使う色んな独自マクロ機能を右クリックメニューに登録して、
どんな時にも使えるようアドインファイル(.xlam)化して
XLSTARTフォルダにおいて使っています。

ThisWorkbookに下記コードで、登録と終了時の処理を書いているのですが、
Excelを起動終了するたびに、Excel15.xlbのファイルサイズが肥大化していく
現象で困っています。

Sub Workbook_Open()
Call AddRightClickMenu '右クリックメニュー追加
End Sub

Sub Workbook_BeforeClose(Cancel As Boolean)
Application.CommandBars("Cell").Controls("xxxxx").Delete
End Sub

BeforeCloseの中にExcel15.xlbの強制削除を入れても、勝手にサイズUPした
ファイルが作成されてしまいます。

これを解決する方法があれば、教えてください。
0517デフォルトの名無しさん (ワッチョイ c668-OyHA)
垢版 |
2021/10/24(日) 14:39:49.48ID:DK1tlC+k0
>>513
他ソフトのショートカットと干渉してる可能性がある
例えばalt+F11はGeforceとかぶって使えなかったりする。めんどい
0518デフォルトの名無しさん (ワッチョイ c668-OyHA)
垢版 |
2021/10/24(日) 14:40:27.40ID:DK1tlC+k0
>>513
問題の切り分けとして、
Ctr+Shift+F
をCtr+Shift+KなりCtr+Shift+Uなり、色々試してみて
0519デフォルトの名無しさん (ワッチョイ 05da-WU2P)
垢版 |
2021/10/25(月) 13:04:03.44ID:wahm2g0s0
>>517,518
有難うございました。
Ctr+Shift+Uは干渉しませんでした。
Ctr+Shift+FとCtr+Shift+Iが他のアプリに割り振られているようです。
Ctr+Shift+Fはそのアプリの設定を外すことができました。
Ctr+Shift+Iは外す方法が見つかりませんので別の組み合わせに変更します。
0521471 (ワッチョイ 2eda-OyHA)
垢版 |
2021/10/26(火) 13:17:41.14ID:NeMLM07o0
>>471,472,474です。
間があいてしまい、申し訳ございません。

マクロを実施すると、「支店一覧」A2:A18のA2,A3,A4のシートまでは対応が完了するのですが、
その後A5名のシートが作成されず、「原本(2)」というシートが作成されたあと、以下エラーとなります。
「実行時エラー'1004':
この名前は既に使用されています。別の名前を入力してください。」
.Name = 支店名.Value
の部分が黄色くなっています。

こちらで「支店一覧」をみるかぎりではおかしなところはみあたりません
(もちろんA2:A18に重複もありません)
0523デフォルトの名無しさん (スプッッ Sda2-zvUI)
垢版 |
2021/10/26(火) 15:44:08.87ID:W8WFYMpad
以下の処理について質問です
「条件→A列に1行目から文字列が多数行入力されていて、文字列にはa、b、cのアルファベットのどれか一つのみが必ず含まれている。(例 ”15あうa” 例"7c8-of")
やりたいこと→B列に連番を振りたい。aを含む文字列だけで1,2,3,4... bを含む文字列だけで1,2,3,4...のような感じで振りたい。」

一応自分で次のようにやってみたら出来ました
セルC1 C2 C3に a b cと入力して、for eachでC1~C3を括る?
さらにfor eachでA列を括る。
そしてA列にて上のセルから順番にaを含むかif文で判断して連番を入力させる。
b,cについても同様に行うと


for とか ifしか使えないためこのようなやり方をしたのですが、もっと適切な方法があれば教えて頂きたいです。
0524471 (ワッチョイ 2eda-OyHA)
垢版 |
2021/10/26(火) 15:50:27.98ID:NeMLM07o0
>>522
非表示でもないです
そもそも「原本(2)」という名前のシートがなぜ作成されるかも謎なんです
(「原本」があるので、「原本(2)」が作成されるときに記載のエラーになるのでは
と推測しています)
0528471 (ワッチョイ 2eda-OyHA)
垢版 |
2021/10/26(火) 17:28:50.64ID:NeMLM07o0
ほんとバカですみません、、、
自分が嫌になります
それなのにみなさま返信有難うございます

追加ですみません
支店名シートのA2:A18の中で、★が支店名に含まれているものは
シートを作成しなくてよいという条件を組み込むことはできますか?
あと、各シートを作成したあとに、シートの数式をすべて値にしたいですが
できますか?

Sub シート作成
Dim 支店名 As Range
For Each 名前 In Worksheets("支店名").Range("A2:A18")
Worksheets("原本").Copy After:=Worksheets(Worksheets.Count)
With ActiveSheet
.Name = 支店名.Value
.Range("B5") = 支店名.Value
End With
  Range("B3").AutoFilter 1, "0"
With Range("B3").CurrentRegion.Offset(1, 0)
.Resize(.Rows.Count - 1).EntireRow.Delete
  Range("B3").AutoFilter
End With
Next 支店名
End Sub
0531デフォルトの名無しさん (ワッチョイ 0d68-OyHA)
垢版 |
2021/10/26(火) 22:18:39.74ID:GuH7IxvP0
>>523
ここまでせんでもって思うけど
https://i.imgur.com/RQpkaWZ.png


Sub foo()

'準備
myarray = Array("aa", "bb", "cc")

'初期化
Set myDic = CreateObject("Scripting.Dictionary")
For Each x In myarray
myDic.Add x, 0
Next

'本体
最終行 = Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To 最終行
For Each x In myarray
If InStr(Cells(i, 1), x) <> 0 Then
myDic(x) = myDic(x) + 1
Cells(i, 2).Value = myDic(x)
End If
Next
Next
End Sub
0533デフォルトの名無しさん (ワッチョイ 895f-/pkb)
垢版 |
2021/10/26(火) 23:37:03.27ID:HhcOopAn0
D列のセルに文字を入力するとJ列のセルが塗りつぶされる処理をしたいのだがどうしたら良いものか

Sub Macro1()

If InStr(Range("D1").Value, "") > 0 Then
Range("D1").Offset(0,6).Interior.ColorIndex = 16
Else
Range("D1").Offset(0, 6).ClearFormats

End If
End Sub
0538デフォルトの名無しさん (ワッチョイ 82ad-WU2P)
垢版 |
2021/10/28(木) 11:45:30.63ID:WDBBEMQR0
コードを一括エクスポートするアドインでおすすめのってないですか?
Windows10のMicrosoft 365を使っていますが、下記は動作しませんでした。

https://moondoldo.com/DoldoWorkz/?Excel%E3%83%9E%E3%82%AF%E3%83%AD/VBA%E3%83%9E%E3%82%AF%E3%83%AD%E3%81%AE%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%82%92%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%88
ExcelVBAExport2007_xlam_20100321.ZIP → ExcelVBAExport2007.xlam
0540デフォルトの名無しさん (ワッチョイ 82ad-WU2P)
垢版 |
2021/10/28(木) 12:12:13.13ID:WDBBEMQR0
>>538
上記サイトに記載されているとおり、
アドインフォルダに.xlamファイルをコピーし、アドイン登録を済ませて、
[Visual Basic プロジェクトへのアクセスを信頼する]のチェックボックスをオンにした状態でも、
[開発]タブに[エクスポート][選択エクスポート]が表示されなかったので、
最新のExcelでは使えないと勘違いしていたが、下記の手順で使えるようになった。

@エクスポート対象のxlsmファイルを開く。
A[開発]-[Excelアドイン]をクリックする。
B有効なアドイン一覧に、既に登録済みのExcelvbaexport2007がある。
C既にチェックボックスはオンになっているが、そのまま[参照]ボタンを押す。
Dアドインフォルダ(〜Roaming\Microsoft\AddIns)が開く。その中のExcelVBAExport2007.xlamを選択する。
E「この場所に'〜Roaming\Microsoft\AddIns\ExcelVBAExport2007.xlam'という名前のファイルが既にあります。置き換えますか?」と聞かれる。
F[はい]を選択する。
G[OK]ボタンを押してアドインウィンドウを閉じる。

[開発]タブ内の右端に[エクスポート][選択エクスポート]が現れる。
0541デフォルトの名無しさん (ワッチョイ 0605-/PVD)
垢版 |
2021/10/28(木) 16:45:24.43ID:IU5+Uq0S0
Excel 2019
「オプション」−「詳細設定」の「グラフィックアクセラレータを無効にする」のチェックを
VBAで設定するにはどうすればいいでしょうか?
AccessだとApplicationのSetOptionやGetOptionでできるんだけど、
Excelには見当たらないのでよろしくお願いします。
0544デフォルトの名無しさん (ワッチョイ c1da-BvZE)
垢版 |
2021/10/29(金) 13:13:50.85ID:A+QIge6G0
同じpersonal..xlsbを複数の端末で使いたいので xlstart フォルダーから同期フォルダーに移動し
xlstart フォルダーではかわりに同期フォルダー内のpersonal.xlsb へのショートカットを置きました。
期待通り起動時にpersonal.xlsbを読み込みますが毎回マクロの実行許可を求めるので面倒です。
マクロ有効ファイル一般の仕様であることは理解しておりますが、特定のマクロファイルのみ確認を省略するか、
またはxlstart内にpersonal..xlsbにおいたまま同期する方法はないでしょうか。
xlstartフォルダー自身を同期フォルダーに設定することも検討しましたが、
googlドライブの場合は同期フォルダーは全てGドライブに移動するので
xlstartフォルダ自体が自動実行できなくこと、またpersonal.xlsb起動時にマクロを有効にするか確認
がはいり解決になりません。
0547546 (ワッチョイ c1da-BvZE)
垢版 |
2021/10/30(土) 16:14:32.06ID:jbS9woJL0
>>545
personal.xlsbを信頼できるドキュメンに設定したらできました.
無礼な物言いごめんなさい.
0548デフォルトの名無しさん (アウアウキー Sa55-Jw6B)
垢版 |
2021/10/30(土) 16:52:18.20ID:u+oDsXHga
ゆるさん、打ち首じゃ
0553デフォルトの名無しさん (ワッチョイ 9190-7alp)
垢版 |
2021/11/04(木) 12:18:24.94ID:onPWkBOz0
for i = 1 to 100 step 1

  '最終行は処理中に変動するため栗けしの都度最終行を取得する
  Worksheets(OutputSheetName).Cells(1000, 1).Select
  Selection.End(xlUp).Select
  iRastrow = Selection.Row

  for j =2 to iLastrow step 1
   何らかの処理
  next j
next i

上記のようなプログラムがあったとして j=2、iLastrow=1のように最初から子ループの終了条件を満たしているようなケースで
子ループの j が 2でクリアされず親ループの繰り返しの都度 3,4...と加算されていくケースがあるんだけどさ

最初からループの終了条件を満たしている場合は、for j=2 … の部分の変数値のクリアはされないものなの?
終了条件を満たしているか満たしていないかに限らず、この行にきたら j=2 でクリアしてくれると思ってたんだが…
0554デフォルトの名無しさん (アウアウキー Sa55-Jw6B)
垢版 |
2021/11/04(木) 12:30:43.13ID:h43gOvN2a
LとRはいいの?
0559デフォルトの名無しさん (ワッチョイ 1901-tWn2)
垢版 |
2021/11/04(木) 19:43:59.36ID:ipFD2P4r0
エクセルでチェック表作った

職員に入力してもらって月一で提出してもらってrpaツールに流し込んで専用ソフトに入力してるけど

バージョンアップしたファイル渡したのに
無視して古いファイル使ってきたり
様式ぶち壊してめちゃくちゃなファイルを提出してきて
まともなデータに成形するのに死ぬほど苦労した
ゴミ職員にたいしてブチ切れそうなんだけど
どうしたらいいですか
0561デフォルトの名無しさん (ワッチョイ 1901-tWn2)
垢版 |
2021/11/04(木) 19:53:35.21ID:ipFD2P4r0
なるほどありがとう
このゴミ職員エクセルを魔法か何かと勘違いしてるわ
あまりに適当な仕事に腸煮えくり返る
0563デフォルトの名無しさん (ワッチョイ 698e-YpcQ)
垢版 |
2021/11/04(木) 20:21:03.55ID:BJCJqERO0
>>561
お前みたいな馬鹿が作っているからそうなる
0564デフォルトの名無しさん (ワッチョイ 1901-tWn2)
垢版 |
2021/11/04(木) 20:33:51.75ID:ipFD2P4r0
どういう状況のファイルかもわからんで煽るバカに言われてもな
0565デフォルトの名無しさん (ワッチョイ 698e-YpcQ)
垢版 |
2021/11/04(木) 20:44:25.67ID:BJCJqERO0
>>564
壊されるような造りになってるのが馬鹿の証だぞ
0566デフォルトの名無しさん (ワッチョイ 7968-BvZE)
垢版 |
2021/11/04(木) 20:47:33.02ID:q8Oivabh0
>>561
妥協点として下位互換は残しておいて
それでも成形の必要があるやつはお断りかな

成形はあなたの仕事では無いよ
ただ提出者が楽なようにしてるだけだと思う
それは提出者が仕事してないって事だな
0567デフォルトの名無しさん (ワッチョイ 1901-tWn2)
垢版 |
2021/11/04(木) 20:49:27.77ID:ipFD2P4r0
仕方ないね。元は別の人が勝手に作った表で
おれのはその表をコピーして○がつけられるようにしたものだから

人のファイルを保護かけてガチガチに固めて私物化するわけにも行かないし
お前みたいな後先考えられないバカは
他所のファイルをガチガチに固めて属人化して批判されるんだろうけど
0568デフォルトの名無しさん (ワッチョイ 698e-YpcQ)
垢版 |
2021/11/04(木) 20:51:12.58ID:BJCJqERO0
>>567
典型的な馬鹿の言い訳
0569デフォルトの名無しさん (ワッチョイ 1901-tWn2)
垢版 |
2021/11/04(木) 20:53:21.15ID:ipFD2P4r0
もう反論終わって罵倒で誤魔化すタイムか
知能指数低すぎるわ
0571デフォルトの名無しさん (ワッチョイ 8101-HYPS)
垢版 |
2021/11/05(金) 05:16:46.04ID:UB8UVAT80
>>553
そもそも

>> 子ループの j が 2でクリアされず親ループの繰り返しの都度 3,4...と加算されていくケースがある

が起きてるとどうやって判断したのかが分からない。

例えば実行できるコードにdebug.printを挿入しておいて、
「これを実行するとこんな出力されます、実際にはこうなって欲しいです」
みたいな具体的な質問してくれた方がいいと思う。

そういう分かりやすい質問文書くと、その過程で自己解決できたりするし。
0572デフォルトの名無しさん (ワッチョイ 924f-Z5zA)
垢版 |
2021/11/05(金) 06:16:51.41ID:7Ov3I8ut0
>>567
とは言え上でも言われている通り
違うフォーマットのものは受け付けないようにするか
触られたくないところは保護掛けるくらいしか現実的な解決策はないだろうね

形式の違うもの送られて来たからこちらで手で直す、というのは基本的に違う気がする。

フォーマットチェックを行うツールを作ってそのゴミ職員とやらに「これでOKとならないものは受け付けません」とやる手もあるけど、そのツール作るのにも工数は掛かるからね。
0573デフォルトの名無しさん (ワッチョイ 8101-HYPS)
垢版 |
2021/11/05(金) 06:56:51.17ID:UB8UVAT80
>>559
>無視して古いファイル使ってきたり

1,共有サーバーに置いてショートカットから起動させる
2,実際の処理はサーバーにやらせる。
3,VBA諦めてWebアプリにする

>様式ぶち壊してめちゃくちゃなファイルを提出してきて

そういうのは警告メッセージだして拒否するもの。

これまで未対応の様式のファイルも修正するおせっかいをしておきながら、
「めんどくさい」と突然キレるのは最悪。
やるならやりきる、やらないなら最初からやらない。中途半端は一番ダメだからね。
もしくはVBA諦めてテキスト関連のライブラリ豊富な使いやすい言語にする。
0574デフォルトの名無しさん (スフッ Sdb2-slLX)
垢版 |
2021/11/05(金) 08:36:41.38ID:KTVj1H8Jd
>>559
こういう風にやれよっていう説明資料が足りてないんだろ。
自責部分は改善してして、それでも従わない奴には突き返して再提出してもらうのが良い
0575デフォルトの名無しさん (ワッチョイ 0dce-H2rd)
垢版 |
2021/11/05(金) 08:42:12.18ID:zTls7LAZ0
話を聞かない、説明を読まない、世の中の大多数はアホばかり
まあこのことに気付かないで文句ばっか言ってるのもたいがい間抜けなんだけど

現実を受け入れて、バカにも使える仕様を考えるのが仕事ってもんだ
0576デフォルトの名無しさん (スフッ Sdb2-slLX)
垢版 |
2021/11/05(金) 09:17:23.17ID:KTVj1H8Jd
それはまあそうなんだけど資料を揃えておけば
ひとまず相手側のせいにできるからそれを根拠に文句は言いやすいわ
0577デフォルトの名無しさん (アウアウキー Sab1-jU0I)
垢版 |
2021/11/05(金) 10:08:06.00ID:X0+Pa++fa
現場で変更するのはもとファイルが使いにくいからじゃないのか
0580デフォルトの名無しさん (ワッチョイ 9201-a1M3)
垢版 |
2021/11/05(金) 10:25:07.86ID:7p6i3Z7i0
>>553
step 1 が気持ち悪い
てか、まずこういうの作って実験してみればいいじゃん
挙動がわからなければ、めんどくさがらず小さなプログラム書いてどう動くか実験
そういうことやる癖つけないと厳しいよ

Option Explicit

Sub TestSub()
Dim i As Integer
Dim j As Integer

Dim lastRow As Integer
lastRow = 1

For i = 1 To 10
For j = 2 To lastRow
Debug.Print "aa"
Next j
Next i
End Sub

まぁ、普通に考えれば、どう見てもiRastrowが1ではなく別のもっと大きな値をとっている可能性が果てしなくでかいわ
0581デフォルトの名無しさん (スフッ Sdb2-slLX)
垢版 |
2021/11/05(金) 10:52:29.16ID:KTVj1H8Jd
デバッグで値確認していけばいいだけの話
0582デフォルトの名無しさん (ラクッペペ MM96-sHbI)
垢版 |
2021/11/05(金) 12:18:28.52ID:gSvscUzNM
確認した結果、言語に致命的な問題があったという研究報告だろ
異論があるなら論文で提出しろや
0583デフォルトの名無しさん (ワッチョイ b145-9ETr)
垢版 |
2021/11/05(金) 12:19:13.47ID:WyPtUDby0
文系プログラマにデバッガ使えは酷
0584デフォルトの名無しさん (ワッチョイ b145-9ETr)
垢版 |
2021/11/05(金) 12:24:56.88ID:WyPtUDby0
研究報告は5chで
0586デフォルトの名無しさん (アウアウキー Sab1-jU0I)
垢版 |
2021/11/05(金) 17:15:34.16ID:T1OvPNHaa
作業ルールの変更は職場長の許可もらってやれよ
勝手に変なシート作ってフォーマット変えるなとか言われてもね
0587デフォルトの名無しさん (ワッチョイ 924f-Z5zA)
垢版 |
2021/11/06(土) 09:43:33.18ID:GqSttEtV0
年末調整面倒くさい
何故に毎回フォーマットを変えるのか
いや、分かるよ、控除や税金計算が変わってるんだから仕方ないけどさ、
国には毎年キチンと高い税金納めているんだからEXCELで自動計算してくれて、それ印刷して提出すればいいくらいのもの作ってくれないのかなぁ
0589デフォルトの名無しさん (ワッチョイ 9201-+aG2)
垢版 |
2021/11/06(土) 11:02:12.05ID:I7EssLBv0
>>587
うちの会社はイントラで内容確認して問題なければ「申請する」ボタンをクリックするだけだよ
俺は嫁がパートに出てるからその年収入力が必要だけど昔に比べたらめっちゃ楽になった
0591デフォルトの名無しさん (ワッチョイ 0dce-H2rd)
垢版 |
2021/11/06(土) 13:59:19.77ID:hCRiIaw50
>>587
高額納税者なら会計士にたのめばええ
控除とか支給金とか、毎年新しい制度まできちんとチェックして、うちで使えるやつを教えてくれる
家族構成まで考慮して節税のアドバイスもくれるし、確実に手数料以上のメリットがある
0595デフォルトの名無しさん (ワッチョイ 9eda-jU0I)
垢版 |
2021/11/07(日) 22:57:31.69ID:XNg8pwBQ0
オランダはオラんだ
0598デフォルトの名無しさん (アウアウキー Sab1-4u4U)
垢版 |
2021/11/08(月) 12:53:20.11ID:TKWun27Sa
そびえ立つソビエト
0599デフォルトの名無しさん (ワッチョイ a23d-qqEe)
垢版 |
2021/11/08(月) 13:31:29.26ID:/zBQ/QG70
VBAの構造体で
Type Book
  title As String
  author As String
  price As Long
End Type

桁数を予め指定しておくことてできないんですか?
こんなような感じで
Type Book
  title As String (10)
  author As String (10)
  price As Long (5)
End Type
0603デフォルトの名無しさん (ワッチョイ 924f-Z5zA)
垢版 |
2021/11/08(月) 20:52:16.35ID:bylJ/Cyl0
>>601
数式だけでちゃちゃっと出来そうじゃん
そんなんで本格的なWebサイト作ってアクティブレポートとかではくより
このEXCELファイルダウンロードして必要なところに入力してねで終わらせた方が安上がりだし
むしろここ、EXCELVBAのスレだからEXCELにすらかすってないこと書くのってなんか気が引けるじゃん
0604デフォルトの名無しさん (ワッチョイ ad49-A8Ax)
垢版 |
2021/11/09(火) 09:52:46.91ID:cbbOFy6t0
というか、最悪Webフォームやらにして、番号言えば参照してもらえるって感じでいいとおもうけどね
印刷とかしてもってくのめんどいし
本人確認で行くのはしゃあないとして

ま、スレ違い
0610デフォルトの名無しさん (ワッチョイ 7501-3yk9)
垢版 |
2021/11/12(金) 16:46:18.75ID:xE6WDQNQ0
VBAっていうかエクセルの話題かもしれないけど、
ユーザーに入力させたテーブルがあってそれを校正するとき、
「間違っている部分」と「そこの入力形式の説明と記入例」をどうやって表示したら分かりやすいと思う?

イメージとしては「入力形式を確認する」ボタンをクリックすると
間違い場所が何らかの方法で説明されて、
ユーザーがそれを見ながら修正する感じです。
0612デフォルトの名無しさん (ワッチョイ 7501-3yk9)
垢版 |
2021/11/12(金) 18:11:45.18ID:xE6WDQNQ0
>>611
複雑な形式(5〜10文字の英数+アンダースコア+5文字の英数の繰り返し用のような)も多数あるのですが、可能でしょうか。
GoogleスプレッドシートならSplit関数があるので捏ね繰り回せばパース出来なくはないですが・・・

ユーザー定義関数で入力規則が設定できるのかとも思ったのですが、
「指定した範囲の名前は見つかりません」と出てしまい、
そもそも関数として認識されませんでした。
0613デフォルトの名無しさん (ワッチョイ 23e6-aqCv)
垢版 |
2021/11/12(金) 18:36:55.58ID:grozR+8R0
以下のようなマクロが組みたいです。

ファイル(以下A)が保存されているフォルダ内を検索して、特定の名前が含まれる別のエクセルファイル(以下B)を開いて、Bの各シートをシート名を指定した名前に書き換えつつAの指定の位置にシートを追加する。開いたBは閉じる。
0614デフォルトの名無しさん (ワッチョイ 158e-OVKX)
垢版 |
2021/11/12(金) 18:40:57.40ID:KziMfQdv0
>>613
そうか頑張れ
ここはお前の日記帳ではない
0616デフォルトの名無しさん (ワッチョイ 2301-AQUW)
垢版 |
2021/11/12(金) 19:19:22.94ID:a3j0d+bF0
>>610
> 「間違っている部分」
そこにフォーカス当てるとか色を付けるとか

> 「そこの入力形式の説明と記入例」
メッセージ表示ればいいけど修整箇所がたくさんあるとウザくなるからそういうことが予想されるケースでは俺ならエラーセルに色付けしてそこが選択されたらステータスバーに表示するとかするかな
0622デフォルトの名無しさん (ワッチョイ 7501-3yk9)
垢版 |
2021/11/13(土) 00:19:30.49ID:IngrJLwZ0
>>616
ステータスバーに書かれていると気づいてもらえるかどうか・・・

>>617
正規表現で入力規則に設定可能か、
自分ググってみたのですが見つかりませんでした・・・
やり方を教えてください。
0623デフォルトの名無しさん (ワッチョイ 234f-0LCi)
垢版 |
2021/11/13(土) 04:21:00.05ID:9Z7Y7eKB0
>>610
色んなやり方があると思うけど
例えば小さなテーブルならOK、NGやなにがどう間違っているかの列を数式で出る欄を設けておいて
全ての行がOKならOK、そうで無ければNGと表示するセルをひとつ作って
それがNGであればなんかのボタン押したときに「入力値に誤りが有ります」的なメッセージを出す方法を使ってるところのが分かりやすかったかな。

ただこの方式だとユーザー定義関数使うとマクロ無効にされてる状態では正しく反応しないのが難点だけど。
0627デフォルトの名無しさん (ワッチョイ 45da-wd7R)
垢版 |
2021/11/13(土) 17:00:36.35ID:HusEpJk10
>>613
クエリでフォルダ指定すると、ファイル名一覧を取得出来るから
キーワードで絞込む。
で、インデックス列と希望する書き換えファイル名の列作ってリストにしといて、
あとはVBAで、IF FOR構文とSaveAsあたり使えば
出来るんでね?
0628デフォルトの名無しさん (ワッチョイ 158e-OVKX)
垢版 |
2021/11/13(土) 17:14:33.96ID:bgvplZUP0
>>627
ただの決意表明に何でコメントしてるの?
Ruby基地外の自演コメントですか?
0630デフォルトの名無しさん (ラクッペペ MM4b-wt4Y)
垢版 |
2021/11/15(月) 11:56:57.23ID:xIS0g/4FM
ハロワ行け
0632デフォルトの名無しさん (アウアウウー Saa9-3S+0)
垢版 |
2021/11/15(月) 20:28:22.57ID:UvM84Y/0a
将来の希望としての発言なら
まず稼げる力をつけてからそういう会社に就職したらいいんじゃね
あとYoutuberとかなら勝手にやればいい
0635デフォルトの名無しさん (ワッチョイ 4b2c-FDGb)
垢版 |
2021/11/15(月) 23:32:21.10ID:OfX77+Sf0
>>613
例えば、Ruby で、glob を使って、
拡張子がcsv で、ファイル名に13 を含む、ファイルのフルパスを求めると

# 絶対パスのディレクトリ名の後ろに、* を付けること!
# . で始まる、隠し directory, file を除く
glob_pattern = "C:/Users/Owner/Documents/*.csv"

filename_substr = "13"

p Dir.glob( glob_pattern )
.select { |full_path| File.file?( full_path ) } # ファイルのみを取り出す
.select { |full_path|
# ファイル名だけを取り出して、指定の語句を含む、ファイル名を含むものだけを抽出する
File.basename( full_path ).include?( filename_substr )
}

出力
[ "C:/Users/Owner/Documents/input113_2.csv",
"C:/Users/Owner/Documents/input13-3.csv" ]
0638デフォルトの名無しさん (アウアウウー Saa9-+2u6)
垢版 |
2021/11/17(水) 14:18:28.93ID:ziCKlq68a
標準モジュールで、シートAから文字列拾ってシートBに転記しようとしたら、
望まぬ形でBのWorksheet_Changeを踏んだのでCaseで分けて素通りさせたんですが、
どうにもBのValueが1004エラーで書き換わっていないのにWorksheet_Changeが発動しているらしく、
なんの変哲もない「Worksheets("B").Range("XX").Value = str」が実行されません。

F8で(Changeしてないのに)Worksheet_Changeの中身だけ進む事ができますが、それが終わると元の位置に戻って再びエラーになります。
どうしたらValueを拾って貰えるんでしょうか。
0649デフォルトの名無しさん (ワッチョイ 1b2f-IS5D)
垢版 |
2021/11/20(土) 21:06:56.40ID:4VXr5Xxs0
2021ならAHOで出来るよ
0650デフォルトの名無しさん (ワッチョイ 5701-kfcM)
垢版 |
2021/11/20(土) 23:15:05.65ID:MzgsRNiS0
作る前に様式はこれでいいよねって事前に確認したのに、作ったあとに
やっぱりああでもないこうでもないと注文つける
簡単なコードすらまともに書けないゴミの後出し地獄にムカついてくる
じゃあてめえが作れと
0651デフォルトの名無しさん (ワッチョイ ef8e-1fs8)
垢版 |
2021/11/21(日) 00:12:13.26ID:VeOo+GZo0
たかがVBAを少し書けるだけで他人をゴミ呼ばわりする馬鹿
こいつみたいな勘違いの思い上がり馬鹿はよく見かける
0652デフォルトの名無しさん (ワッチョイ 5701-kfcM)
垢版 |
2021/11/21(日) 00:20:55.86ID:9y2yNJe30
わざわざ作業やり直したくないから様式を事前に確認したのに後出しで人の作業増やすやつをゴミ呼ばわりして何が悪いのかな
お前も後出しで人の作業量増やしそう

自分でやるなら好きなだけ後出ししていいけどな。できないでしょ
0653デフォルトの名無しさん (ワッチョイ ef8e-1fs8)
垢版 |
2021/11/21(日) 01:55:02.67ID:VeOo+GZo0
相手の要求を理解して指摘される前に用意しとくものだろ
馬鹿は言われたことしかできないから馬鹿だっての
0655デフォルトの名無しさん (ワッチョイ ef8e-1fs8)
垢版 |
2021/11/21(日) 02:12:33.23ID:VeOo+GZo0
相手のレベルに合わせて打ち合わせできないから馬鹿だっての
0657デフォルトの名無しさん (ワッチョイ ef8e-1fs8)
垢版 |
2021/11/21(日) 02:17:32.02ID:VeOo+GZo0
馬鹿は相手が理解しているかどうかすらわからないから馬鹿だっての
0662デフォルトの名無しさん (ワッチョイ 9bfd-YPKb)
垢版 |
2021/11/21(日) 06:13:44.85ID:8rSjcXEU0
VBAでなくてもクライアントからの急な仕様変更なんて日常茶飯事だから諦めろん
ある程度の仕様変更なら少ない手間で対応できる作りにするのも腕の見せ所だぞ
まぁ言うてその仕様にすんなら全部1から作り直しやんけって仕様変更もなくはないのがツラいところ
0663デフォルトの名無しさん (ワッチョイ c3ce-+VBe)
垢版 |
2021/11/21(日) 08:27:37.33ID:V2WgyX4h0
だからメンテナンス性とかモジュール化とかクラスが大切になってくるんだよ
経験を積んで仕様書に書かれてない部分も適切に作り込んでおいて、仕様変更のコストを下げるのも腕の見せ所
もちろん、表向きは大変だと言って渋って見せたり高額なメンテ費用を請求する駆け引きも必要
0665デフォルトの名無しさん (アウアウウー Sa3b-Z5oZ)
垢版 |
2021/11/21(日) 10:03:03.00ID:zwWMSsz4a
仕様変更っていっも動作確認あわせて1時間もかからんだろ
ここで愚痴る前にさっさと直せよ
0666デフォルトの名無しさん (ワッチョイ ef8e-1fs8)
垢版 |
2021/11/21(日) 12:48:58.97ID:VeOo+GZo0
馬鹿だから修正に手間が掛かるようなプログラムしか作れないのだろ
0667デフォルトの名無しさん (ワッチョイ a3da-hfdc)
垢版 |
2021/11/21(日) 14:30:08.25ID:CsAuHtPC0
仕様確認を反故にする ユーザーに怒っている人をディスってる奴らが数人いるけど、こいつらは他人をディスってストレスを発散する病んだ人たちなんだろうな。
0671デフォルトの名無しさん (ワッチョイ fb2f-C1KD)
垢版 |
2021/11/21(日) 17:56:13.83ID:Cim/yDW60
後出して仕様変更されても、その分の納期と金額を保証してくれるならまあ許せる
そういうやつらは大概は、元の金額のままで同じ納期でやれっていうからな
0672デフォルトの名無しさん (ワッチョイ c6da-Z5oZ)
垢版 |
2021/11/21(日) 18:04:49.83ID:rJQke0fG0
>>669
それでもここで愚痴るほど暇な訳だが
0674デフォルトの名無しさん (ワッチョイ ef8e-1fs8)
垢版 |
2021/11/21(日) 19:50:30.82ID:VeOo+GZo0
エンドユーザーに仕様なんて伝えても理解できないことも織り込めない素人に毛が生えただけのVBAプログラマーがこぼしているだけだからな
0676デフォルトの名無しさん (ワッチョイ ef8e-1fs8)
垢版 |
2021/11/21(日) 23:12:50.46ID:VeOo+GZo0
悔しかったか?
どんな仕事でも言われたこと(それも自分が理解できる範囲だけ)しかできない無能に限って、少しプログラムできると天狗になって自分が偉いと思い込む
0682デフォルトの名無しさん (アウアウウー Sa3b-Z5oZ)
垢版 |
2021/11/22(月) 11:55:26.38ID:L9slPYHUa
15年もやればそうなるんじゃね
0688デフォルトの名無しさん (ワッチョイ a3da-+VBe)
垢版 |
2021/11/23(火) 11:46:02.03ID:glM4yG/J0
古い話になるがエクセル2003くらいのことにはブック固有のツールバーとそのツールバーにマクロボタンを登録できた.
そのブックをオープンすると固有のツールバーが表示されてブック固有のマクロを簡単に実行できた.

エクセル2013を使っているけどこういう機能はなくなったのかな.
VBAでもツールバーを作れるけど,commandbarオブジェクトにaddしてボタンをaddしてなど面倒すぎるし,なにより全てのブックで表示されるとか,特定のブックだけで表示させたかったらそれ用のマクロをイベントと関連付けて切り替えるなど面倒.
昔のような機能を復活させる方法はないでしょうか?
0689デフォルトの名無しさん (アウアウキー Sac7-Z5oZ)
垢版 |
2021/11/23(火) 12:15:05.23ID:2bUUy2X7a
2003インストールしたらできるんじゃないかな
0695デフォルトの名無しさん (アウアウキー Sac7-Z5oZ)
垢版 |
2021/11/23(火) 15:46:47.44ID:vnr7FnzGa
>>693
VBAのソースを頭から読み返せばいい
0701デフォルトの名無しさん (ワッチョイ 5f01-iUmB)
垢版 |
2021/11/23(火) 21:42:34.64ID:VKZug2mU0
その件はペンディングでお願いします。
0706デフォルトの名無しさん (ワッチョイ 6256-n9sk)
垢版 |
2021/11/24(水) 21:02:30.81ID:zoTAHfV40
>>684
VBAがインターフェースだのクラスイニシャライザだのポリモーフィズムだの
実装してくれればいいだけじゃないのかな。

「卒業しなきゃいけない」ものでもないだろ、今の普及度見てると。
0711デフォルトの名無しさん (ワッチョイ e263-C1KD)
垢版 |
2021/11/25(木) 23:41:58.44ID:1AcsgpK30
Open/Nameで開く/リネームするファイルの名前に
全角括弧や中黒、半角ピリオドが入っていると
実行時に「エラー53 ファイルが見つかりません」
が出ます。
ファイル名が長すぎるのかと思い短くしたが変わらず、
実行前に上記のような文字を削除しておくとと無事処理が終了します。
しかし手作業で削除するのが面倒なのでそれ以外の対処を知りたいです。
先生方ご教示ください。
0713デフォルトの名無しさん (ワッチョイ 9f49-0CXU)
垢版 |
2021/11/26(金) 17:57:21.05ID:e3tyzrS40
質問です
所定の形式のシートAからデータを取り出し、数値の操作を行ったあと別の形式のシートBに記入すると言うマクロと逆にシートBからシートAに記入するマクロを作りたい場合に楽をする方法はないでしょうか?
今まではA→BとB→Aで2つマクロを作ってたのですが見るところが同じなのでまとめれるように感じたのです
プログラムについて詳しくないので無茶なことを言っているかもしれませんがよろしくおねがいします
0714デフォルトの名無しさん (ワッチョイ ff8e-/YRy)
垢版 |
2021/11/26(金) 18:18:33.57ID:6S+lbrca0
またRuby馬鹿か
0719デフォルトの名無しさん (ワッチョイ 9f4f-OZPX)
垢版 |
2021/11/26(金) 21:29:44.76ID:l5KPHXyn0
もうRubyは飽きたから
VBAで書かないならせめて
今流行りのPythonとか
新たに注目されてるRustとか
いずれWebのExcelで必要になるJavascriptとか
VBAやってる人が次に進みやすい
VB.NetとかC#とかその辺で書けばいいのに
Rubyとかで書いて来るセンスないバカは
死ねばいいと思う
0721デフォルトの名無しさん (ワッチョイ f768-uF9W)
垢版 |
2021/11/26(金) 23:05:04.12ID:Jy5iToKI0
>719
一応マジレスする
rubyにはとんでもないキチガイがいて、そいつが嵐回っている
そのおかげでrubyは総スカン、言語に影響するレベルで貶めされるようになった

キチガイ一人で言語一個潰せたのは割とマジですごいと思う
0722デフォルトの名無しさん (ワッチョイ 5701-+aRL)
垢版 |
2021/11/26(金) 23:29:32.65ID:YCQQxNQi0
あわしろ氏が言ってたけど、ベンダーロックインされるから、特定企業の言語は使わないほうが良いよ。
0724デフォルトの名無しさん (ワッチョイ 9f4f-OZPX)
垢版 |
2021/11/27(土) 07:20:09.69ID:/aLCz2Bk0
あのあわしろ氏とかいうのはアホだから
今はLinuxでさえExcelと似たようなソフトがあってそれでもVBAが動くことか考慮していないのだろう
Cなんか組込系はハードによってすらコードが左右されるのに、必要なときに必要な勉強をすればいいだけなのに変な固定概念を持っててそれを人に押し付けてる
0725デフォルトの名無しさん (ドコグロ MM4f-7Kcm)
垢版 |
2021/11/27(土) 08:52:39.21ID:OaX0N5DnM
>>713
取り出すシートと書き込むシートを引数で渡せばいいだけかと

Sub Hoge(取り出すシート As Worksheet, 書き込むシート As Worksheet)
Dim 値 As Variant
値 = 取り出すシート.Range(取り出す場所).Value
' なんかの処理
書き込むシート.Range(書き込む場所).Value = 値
End Sub

Dim SheetA As Worksheet, SheetB As Worksheet
Set SheetA = ActiveWorkbook.Worksheets("A")
Set SheetB = ActiveWorkbook.Worksheets("B")
' A ⇒ B
Hoge SheetA, SheetB
' B ⇒ A
Hoge SheetB, SheetA
0727713 (ドコグロ MM4f-0CXU)
垢版 |
2021/11/29(月) 11:52:31.66ID:mgylUf/ZM
範囲を別のところに書いたり引数指定でやればいいんですね
遅くなってしまいましたが色々なご意見ありがとうございます
0730デフォルトの名無しさん (ワッチョイ f723-ZQOw)
垢版 |
2021/11/30(火) 13:25:55.62ID:xmFPZymv0
すいません質問させてください。
特定のエラーウィンドウが出たら実行するマクロを作りたいのですが
実行条件の指定の仕方がわかりません。
具体的には「データの入力規制」のエラーメッセージタブで指定した
ウィンドウの「はい(Y)」を自動で押したのちにマクロを実行させたいです。
ご教授お願いいたします。
0734デフォルトの名無しさん (ワッチョイ 17ea-DTN1)
垢版 |
2021/11/30(火) 18:53:53.22ID:gFsrJhmJ0
730です。
vba内?で出たエラーを条件にした処理は探せたんですが、エクセルが出したエラーをトリガーにしたものが探せなくて質問させていただきました。もしあるならば知りたいなと思った次第です。
0737デフォルトの名無しさん (アウアウウー Sa5b-Pymr)
垢版 |
2021/12/01(水) 09:01:08.50ID:k/wjCDWPa
Excelスレに書き込んだ後にVBAスレがあることに気付きました。

VBAでA1セルに入っている文字列を使ってA2セルに文字列を入れたいと考えています。
↓のように作ったときA1が数字だけかアルファベットだけならうまく入るんですが数字とアルファベットを組み合わせた文字列(例えば4A02とか)だと1004エラーとしてアプリケーション定義かオブジェクト定義のエラーがあると怒られてしまいます。
解決方法あるものでしょうか?

Range("A2").value = "=(1,2,3," & Range ("A1").value & ",5,6,7,8,9,""abc"",0)"
0740デフォルトの名無しさん (ワッチョイ 9f4f-OZPX)
垢版 |
2021/12/01(水) 11:09:46.49ID:3lXUqEaB0
>>729
クラスのコンストラクタ自体はあるよ。引数が使えないだけで。
VBAの場合は一般的に言う継承は使えないけども移譲が使えるのでクラスで多態性を持たせる場合は
テンプレートメソッドパターンを使うのではなくストラテジーパターンを使う。
0741デフォルトの名無しさん (ワッチョイ 9ff2-BhQk)
垢版 |
2021/12/01(水) 11:40:27.26ID:QKQZx/r30
ユーザーフォーム上でのハイパーリンクに関して教えて欲しいです。

エクセルで下記のようなデータがあり、各レコードをユーザーフォームで
表示できるようにしています。

レコード 氏名  駅   地図(URL)
1    山田  新宿  https://map.yahoo.co.jp/search?q=新宿
2    鈴木  渋谷  https://map.yahoo.co.jp/search?q=渋谷
3    木村  池袋  https://map.yahoo.co.jp/search?q=池袋



その際、「地図(URL)」のテキストボックスを使ってハイパーリンクの設定を、あるいは
「地図(URL)」のラベルを使ってリンクを開くをお教えていただけないでしょうか。
0743デフォルトの名無しさん (ワッチョイ 9f4f-OZPX)
垢版 |
2021/12/01(水) 11:51:59.83ID:3lXUqEaB0
まぁその前にExcelのユーザーフォームは
スプレッドシートやグリッドビューや
HTMLでいうTableタグのようなものが無いので
擬似的に一覧を作る方法を考える方が
先だと思うけど。
0744デフォルトの名無しさん (ワッチョイ 9ff2-BhQk)
垢版 |
2021/12/01(水) 11:57:47.33ID:QKQZx/r30
Private Sub ラベル地図_Click()
Dim a
a = 地図.Text
ユーザーフォーム.FollowHyperlinks Address:="a"
End Sub

なんとなくこんな感じなかとやってみたのですが、エラーでした。
宜しくお願いいたします。
0745デフォルトの名無しさん (スプッッ Sd3f-y/uX)
垢版 |
2021/12/01(水) 11:59:07.74ID:JKRXUH4pd
VBAって初学者はどうやって勉強すればいいんですか?
0747デフォルトの名無しさん (ブーイモ MMbf-DHDw)
垢版 |
2021/12/01(水) 12:12:34.05ID:KAm88z78M
>>745
変数の定義、ループ文の書き方、条件分岐の書き方が分かれば大体の言語はなんとかなる
あとは自分が何をやりたいかによってこんな動作はできるか?あんな動作は可能か?って一つ一つ調べていけばいい
処理速度が遅いと感じ始めたら最適化とかに手を出したり、シークバーを表示することで体感速度を早めたりっていう事を覚えていけば最低限はなんとかなるんじゃない?知らんけど
0749デフォルトの名無しさん (ワッチョイ 9f4f-OZPX)
垢版 |
2021/12/01(水) 12:31:06.77ID:3lXUqEaB0
>>744
そうだね、
まずは3行目の変数に代入している文字列を
ダブルコーテーションで囲めばいいんじゃないかな。
後、地図.txtってどこのフォルダに格納されているのかな?フルパスで書かないとダメだよね。
最後に>>746の人が言ってるとおり、それだとaという変数の中にある頭を見て飛んでるんじゃなくて、
aというリンク先に飛ぼうとしているよね。
0752デフォルトの名無しさん (ワッチョイ 9ff2-BhQk)
垢版 |
2021/12/01(水) 13:31:12.78ID:QKQZx/r30
Range ってテキストボックス内の文字列(アドレス)指定できたでしょうか??


テキストボックスのオブジェクト名を間違ってた・・・

Private Sub ラベル地図_Click()
Dim a
a = "txt地図" ’テキストボックス(txt地図)内表示の文字列
ユーザーフォーム.FollowHyperlinks Address:=”a"
End Sub

・・・またエラーだ・・・。
「a」「”a”」ともに・・・。
.FollowHyperlinks がダメなのかなぁ。

安易に質問してすみませんでした。
勉強しなおします。
他いろいろ試してまた分からなかったら来ます。
0753デフォルトの名無しさん (ワッチョイ 9ff2-BhQk)
垢版 |
2021/12/01(水) 13:36:58.56ID:QKQZx/r30
>>745
上の>>744初心者です。
マクロの記録使って、そのコード見てイジってます。

この方法って間違ってる気もしますが・・・。
0754デフォルトの名無しさん (ラクッペペ MM8f-aw+H)
垢版 |
2021/12/01(水) 13:40:49.74ID:RRRUPRTbM
フォームオブジェクトには.FollowHyperlinksというメソッドは無いね

WorkbookかApplicationのを使うとよろし
0755デフォルトの名無しさん (ワッチョイ 5701-hL2Y)
垢版 |
2021/12/01(水) 14:39:09.38ID:8YNSD3Np0
Sub マクロ保存したまま拡張子変換()
Dim bk As Workbook
Dim f As Variant
Dim gf , hf
Dim fro As Object
MsgBox (“変換するフォルダを選択して下さい”)
Set fso = CreateObject(“Scripting.FilesystemObject”)
With Application.FileDialog(msoFileDialogFolderPicker)
.show
gf = .SelectedItems(1)
MsgBox (“保存するフォルダを選択してください。”)
FileDialog(msoFileDialogFolderPicker)
. Show
hf = . SelectedItems(1)
End with
Set = fso.GetFolder(gf).Files
For Each f in fso.GetFolder(gf).Files
If LCase(fso. GetExtensionName(f.name)) =“xlsm” Then
Application.DisplayAlerts = False
Set bk = Workbooks.Open(gf & “\” & f.Name)
bk.SaveAs gf & “\”fso.GetBasename(f.Name) & “.xlsx” , 51
bk.Close
set bk = Nothing
End if
Next
fso.MoveFile “gf & \ *.xlsm,_ “hf”
set gf = Nothing
set hf = Nothing
set fso = Nothing
MsgBox “ finished”
End sub
元のマクロデータ結果が消えるのと、フォルダ移管がうまくいきません。誰かたーすーけーてー。
0756デフォルトの名無しさん (ワッチョイ d74e-y/uX)
垢版 |
2021/12/01(水) 14:39:40.62ID:WlcvAg5v0
>>747
>>748
ありがとうございます
0757デフォルトの名無しさん (ラクッペペ MM8f-aw+H)
垢版 |
2021/12/01(水) 15:27:28.95ID:RRRUPRTbM
今日び小学生でも拡張子変更なんぞせんぞ
0765デフォルトの名無しさん (ラクッペペ MM8f-aw+H)
垢版 |
2021/12/01(水) 20:28:25.20ID:FnvfENRiM
ExcelスレにはPCからアクセス出来ないからと
全部手打ちのお客さんが稀に良く来るんだよ
いつものひとって呼ばれているけど個体ではなく群体かもしれないね
0767デフォルトの名無しさん (ワッチョイ bf68-uF9W)
垢版 |
2021/12/01(水) 21:14:41.21ID:qDEAEYAb0
>>745
今やってる手作業を全部マクロで書いてみる
とにかくひたすら、
「入力を最低限に」
「出力を正確に」
を考えると、実用十分な面で腕が上がる

あとはオブジェクト、setなどを覚えると更に快適になるけど
まぁそこまで覚えなくてもいいことがほとんど
0768デフォルトの名無しさん (ワッチョイ ff8e-/YRy)
垢版 |
2021/12/01(水) 21:25:33.13ID:fkQJutja0
「助けて」と質問を書くのは馬鹿ばっか
0771デフォルトの名無しさん (スフッ Sdbf-f7fV)
垢版 |
2021/12/01(水) 22:12:07.13ID:8hr1PHBLd
オコシテ…
0772デフォルトの名無しさん (ワッチョイ 5701-+BwI)
垢版 |
2021/12/01(水) 22:19:52.19ID:jZirIxvE0
excel vnaでパス区切りが入りません。
\マークの前に、変な文字が入ってしまいます。
a=“c:\tmp\”

a=“c: \tmp \”
みたいになります。
解決策をご存知の方いませんか?
0778デフォルトの名無しさん (ワッチョイ ff2c-mgIj)
垢版 |
2021/12/01(水) 23:27:22.80ID:J8+WBzZ00
Ruby の文字列には、こういうメソッドがある

chomp は、文字列の末尾に改行コードがあった場合に、文字列の末尾の改行コードを削除します。
strip は、文字列の前後のホワイトスペース(空白類?)をすべて削除します
0781デフォルトの名無しさん (ワッチョイ ff8e-/YRy)
垢版 |
2021/12/02(木) 02:56:08.75ID:dh8YZ99S0
>>780
Ruby馬鹿に引っ掛かる馬鹿
0782デフォルトの名無しさん (ワッチョイ 5701-+BwI)
垢版 |
2021/12/02(木) 05:50:03.53ID:TBtFTtDf0
>>780
半角スペースでは無い文字だったので、置き換え出来ませんでした。
結局、動的にパスを連結するのは諦めて、一つの文字列にして対応しました。
お騒がせしてすみませんでした。
0785デフォルトの名無しさん (ワッチョイ 9f56-m/w5)
垢版 |
2021/12/02(木) 19:13:44.99ID:Q4ipSZlu0
>>747
> 変数の定義、ループ文の書き方、条件分岐の書き方が分かれば大体の言語はなんとかなる

OOPからのパラダイムシフトすら起きつつある今、それだけでは
ソース見て、?????にならないか。
0792デフォルトの名無しさん (ワッチョイ c0e6-4ess)
垢版 |
2021/12/03(金) 04:54:46.81ID:a7s6mUHw0
>>775
csvがユニコードだったのではなかろうかもう解決したみたいなのでどっちでもいいけど
自分の場合は、ウェブからコピペしたセル上の文字列がユニコードなのにそれをvbaで扱おうとしたらちょっと嵌まったまあなんとかうまく処理できたけど
vbaのエディタはユニコードに対応してないそうだから困っちゃうね
0793デフォルトの名無しさん (ワッチョイ b701-edV9)
垢版 |
2021/12/03(金) 05:26:40.56ID:6JzCupcO0
>>792
これ全く再現できないんだよな

っていうか質問者自身が
「\の前に文字が混入するバグ」であるとか、
原因が「a=“c:\tmp\”」や「file = wsh.specialfolder(“Desktop”) & “\test.csv”」にあると勝手に判断してて、
それがミスリードになってる気がする。

余計な文字が入った個所が偶々\マークの近くだっただけだったり、
実は後々変数を弄っていてそこで混入している可能性もある。

質問者は素直にコードを一部始終書いて、
「ここでこうなるようにしたい」とそれだけ書けばいいのにと常々思う。
0796デフォルトの名無しさん (アウアウウー Sab5-XqrI)
垢版 |
2021/12/03(金) 11:57:05.48ID:9DdfYS8Sa
IE操作をしてとあるページまで辿り着いて、そこのBASIC認証のポップアップにユーザー名とパスワードを入力した後、OKをクリックする、ということをやりたいです
詳しくないのですが、普通にリンクを辿っていく感じではなく、div要素にJavaScriptが埋め込まれていて、VBAでIdやClassを指定してクリックしてもページ遷移しません
BASIC認証を求められるページの先にあるデータが目的なのですが、そこへ直接行くURLは分かっていても、当然ながら先にログインしてないとデータが閲覧できないようになっています
直接URL先へ飛んでもBASIC認証のポップアップが出ないため、初めから順にページ遷移していって、BASIC認証を求められる特定の場所まで辿り着きたいのです
そのBASIC認証を求められるページのURLが分からないので、遠回りでもそういう方法しか自分には思い浮かびません
URLにユーザー名とパスワードを埋め込む方法はもうできないそうなので、どうにかJavaScriptによるページ遷移をVBAによるIE操作でやりたいです
必要な情報がなにかも分からないのですが、具体的にどうすればdiv要素に埋め込まれたJavaScriptを動かせますか?
0797デフォルトの名無しさん (ワッチョイ f64f-HF+D)
垢版 |
2021/12/03(金) 12:53:21.83ID:zxa5p7EY0
>>796
認証している画面(ログイン画面)は分かりますか?
そもそもですが、一度ログインした情報をクライアントサイドで持ち回っているとは限りませんよ。

Webにはサーバー側でセッションというものがあり、セキュリティ上の関係で、ログイン画面で打ち込んだ、あるいはログイン出来た、という情報をそれで持ち回る手段も一般的に使われます。

クッキーやクエリストリングで持ち回る場合も有りますが、一般公開されているサイトであれば望み薄でしょう。

直接入るようにするのであれば、そのサイトも社内環境のような場所にあるのであれば、そういう口を作って貰うのが一番手っ取り早いでしょう。
そんなに簡単に入れるのなら内部の情報抜きたい放題ですよね?
だから認証というものがある訳です。
0798デフォルトの名無しさん (ワッチョイ acce-cP/Y)
垢版 |
2021/12/03(金) 13:12:32.34ID:ssU1VLQS0
>>796
鯖によって使えるかどうか変わるけど、URLにIDとパスワードを埋め込んで認証させてしまうという方法がある
あとJavascriptでのページ遷移もURLにスクリプトを埋め込む方法で飛べてしまうケースがけっこうある
これ以上は具体的にそこのサイトを教えてもらわないと、何が使えるとかアドバイスは難しい
0799デフォルトの名無しさん (ワッチョイ acce-cP/Y)
垢版 |
2021/12/03(金) 13:19:32.02ID:ssU1VLQS0
>>796
URLなんてパケットキャプチャすればすぐわかる
ただしURLにワンタイムキーが含まれてる場合はURLがわかってても直接飛ぶのは不可能
ポップアップウィンドウに文字列を入力する最終手段としてSendKeysというのもあるけど、安定動作させるのが難しすぎるのであまりおすすめしない
0801デフォルトの名無しさん (アウアウウー Sab5-XqrI)
垢版 |
2021/12/03(金) 14:27:04.84ID:SW8VES6Na
>>797
詳細は分からないのですが、一度ログインした後ならば、その先のURLへ直接飛んでも閲覧できるんです
なので、とりあえず一度でもどうにかログインさえすれば、なんとかなるかなと思っています

>>798
外部サイトではないので直接見ていただくことはできないのです
URLに埋め込む方法を試しては見たのですが上手くいきませんでした
欲しいデータのある場所は、URLにパラメータを渡してなんとか飛べることはできたので、BASIC認証が求められるページもそうやって行けるのが一番なんですが、ソースを見ても分からなくてお手上げ状態です
BASIC認証を呼び出してるであろうそれっぽい場所は見つけたんですが、そこからどうも上手くいかなくて・・・

>>799
なるほど
パケットキャプチャ調べてみます
とにかくポップアップさえ表示できれば、最悪SendKeysでEnterしてやろうと思ってました

>>800
あまり良くないであろうことは分かってるんですが、できればすでにあるVBAコードの中に組み込みたいんです・・・
0802デフォルトの名無しさん (ラクッペペ MM34-QcgA)
垢版 |
2021/12/03(金) 14:43:51.51ID:0Pem6RYZM
Authorizationヘッダを追加する方法は試したの?
0803デフォルトの名無しさん (アウアウウー Sab5-XqrI)
垢版 |
2021/12/03(金) 15:07:12.35ID:HI4Cro1ra
>>802
BASE64でエンコードしてやる方法でしょうか?
一番最初にそれを試しましたんですが上手くいきませんでした
0804デフォルトの名無しさん (ワッチョイ f64f-HF+D)
垢版 |
2021/12/03(金) 15:24:32.70ID:zxa5p7EY0
>>801
>>797
>詳細は分からないのですが、一度ログインした後ならば、その先のURLへ直接飛んでも閲覧できるんです
>なので、とりあえず一度でもどうにかログインさえすれば、なんとかなるかなと思っています

ならばgetElementByIdで目的のテキストボックス拾って値設定して、
同様にボタン拾ってClickさせるコードを書いて、その後目的のページに飛べば行けるような気がしますが、それでは駄目なのでしょうか?
0805デフォルトの名無しさん (アウアウウー Sab5-XqrI)
垢版 |
2021/12/03(金) 15:52:30.54ID:vV4ZoTXpa
>>804
IdやClassNameでは.Clickでも駄目でした
ページ遷移という書き方をしてしまいましたが、正確にはdiv要素がstyleで画像になっていて、それをマウスクリックするとそのページ内でメニューがポップアップします
そのメニューにも同様にボタン画像があって、いくつかクリックして潜っていった先の一つをクリックすると、今度はBASIC認証のウィンドウが出てきます
0806デフォルトの名無しさん (アウアウウー Sa3a-j3Ye)
垢版 |
2021/12/03(金) 18:05:37.11ID:n8IJVD8na
web側で認証しなくていいように直せよ
0807デフォルトの名無しさん (ワッチョイ d02c-lkzs)
垢版 |
2021/12/03(金) 20:39:08.05ID:XIVj35HM0
>>805
で書いてある通りに、やっていけば?
Ruby on Rails の統合テストのCapybara は、そういう感じでやっていく

漏れは、Ruby, Selenium Webdriver でブラウザの自動操作して、
yahoo にログインしている

Seleniumでは、要素が出現するまで待ってくれるので、操作しやすい。
この機能がない場合は、適度にsleep して待てば良い
0809デフォルトの名無しさん (ワッチョイ 0a8e-9fbA)
垢版 |
2021/12/03(金) 22:10:47.69ID:j3L0Seq20
またRuby馬鹿の釣りに引っ掛かった馬鹿ども
0811デフォルトの名無しさん (ワッチョイ b701-edV9)
垢版 |
2021/12/03(金) 23:03:37.81ID:6JzCupcO0
>>796
Basic認証の情報はホスト名毎に自動的に送信されるはずだから、
事前に認証後に遷移するURLへAuthorizationヘッダに認証情報を追加した状態でNavigateメソッドを実行しておけばどうかな。
そのあと通常通り辿ってBasic認証が求められるページに行ったらどうなる?
0813デフォルトの名無しさん (アウアウエー Sa66-6Nwx)
垢版 |
2021/12/04(土) 14:10:39.93ID:6zlbLfe7a
根本的な質問で恐縮ですが。EOMonth関数でシリアル値が取れるのはわかっていますが、そこからMonthのみ取り出したらその「月数」のデータ型も日付シリアル値の一部のままと考えていいでしょうか。
それともただのint型やstr型などになってしまうのでしょうか。
0818デフォルトの名無しさん (ワッチョイ 7936-AGux)
垢版 |
2021/12/04(土) 20:10:40.70ID:cgBQWMPD0
1.A列にシートごとに不特定多数(X)のセルがある
2.セルの個数にしたがってを4等分する(小数点以下切り上げ)
3.等分したデータをBCDへ移動する

これをやりたいんだけ2をどう表現すればいいのかわからない
X / 4ってどうやったら表現できますか?

データの最終行の取得方法はわかったけど使い方がわからない…
0825デフォルトの名無しさん (ササクッテロ Sp88-E+rw)
垢版 |
2021/12/05(日) 05:50:33.57ID:LmHUo9b4p
>>793
mac版で編集、保存したファイルでなった事あるよ。
winで作ったxlsmをmacで編集、保存する。
後phpexcelなどのライブラリーを使ってwebからダウンロードさせたファイルでも同様の現象になることがあったなぁ。
0827デフォルトの名無しさん (ワッチョイ acce-cP/Y)
垢版 |
2021/12/05(日) 07:48:10.10ID:qeQQs+3u0
>>822
Sub Macro1()
  A列 = 1234 '全体の個数
  分割 = WorksheetFunction.RoundUp(A列 / 4, 0) '分割後の個数
  Cells(分割 * 1 + 1, "A").Resize(分割, 1).Cut Destination:=Cells(1, "B") 'コピペ2列目
  Cells(分割 * 2 + 1, "A").Resize(分割, 1).Cut Destination:=Cells(1, "C") '3列目
  Cells(分割 * 3 + 1, "A").Resize(分割, 1).Cut Destination:=Cells(1, "D") '4列目
End Sub
0828デフォルトの名無しさん (ワッチョイ 7936-AGux)
垢版 |
2021/12/05(日) 11:29:11.55ID:PoobQwg20
数値をバーコード化するマクロ使うと、かなりの確率でWorksheet クラスの Paste メソッドが失敗しました。が起きるのはなぜでしょうか

貼り付けコマンド直後にDoEventやると少し緩和されます
0831デフォルトの名無しさん (ワッチョイ 2cda-Z6Z9)
垢版 |
2021/12/05(日) 16:00:44.92ID:2zMPQ80f0
           |
            |  彡⌒ミ
           \ (´・ω・`)また髪の話してる
             (|   |)::::
              (γ /:::::::
               し \:::
                  \
0832デフォルトの名無しさん (ワッチョイ 632f-0sOk)
垢版 |
2021/12/05(日) 16:26:53.62ID:njmkqf+T0
>>831
このハゲ!
0833デフォルトの名無しさん (スッップ Sd70-6a6v)
垢版 |
2021/12/05(日) 17:47:50.87ID:VQoGm9OLd
バーコードフォント使う方法ってダウンロードしないとダメじゃね
現場でこそこそやってる俺はOLEオブジェクトだったか使う王道でやるしかなかったわ

ぐぐるとこの方法がトップに出てくるわけなんだけど
もし>>828がこの方法を使っているとして
何の目的でpasteメソッドを使ってるんだろうね
普通にバーコード作成するだけだと、たぶんだけどpasteメソッドは出てこない
0834デフォルトの名無しさん (アウアウウー Sa6b-vGAJ)
垢版 |
2021/12/10(金) 18:22:43.48ID:y+vFgULga
質問つか愚痴だけども…
閑散期にやってるアピールで始めたVBA、
入れ過ぎた塩を中和するのに砂糖を入れ、
入れ過ぎた砂糖を中和するのに塩を入れるのを繰り返した
ヘタクソ料理みたいなコーディングの果てに繁忙期に食い込んで上司の視線が痛い…
依然としてどっか直したらどっかが狂う…
業務改善を謳いながら結果的に仕事と混乱をもたらしただけだった…
0835デフォルトの名無しさん (ワッチョイ 4768-PFkU)
垢版 |
2021/12/10(金) 19:14:12.64ID:8RSWuNFi0
>>834
典型的な初心者で草

俺も最初は随分と苦労したけど、
そうなったら最初から書き直したほうが絶対に早いし、腕も上がる
糞みたいなコードを読み直す時間は無駄
せっかく書いたのに・・・って思う気持ちは窓から投げ捨てろ
0837デフォルトの名無しさん (ワッチョイ 87ce-xLgN)
垢版 |
2021/12/10(金) 21:53:28.84ID:RVt2OdWb0
一般的にデバッグはコーディングの10倍ぐらい経験や知識が必要な作業だから初心者には荷が重い
まずは最初から書き直してちゃんと動く物を作り上げた方がいいと思うよ
0842デフォルトの名無しさん (ワッチョイ 4768-PFkU)
垢版 |
2021/12/11(土) 00:15:37.34ID:8/VOYP4o0
>>838
その辺は慣れ。今からほしいコードが、「書く」「コピペ」、どっちが早いかによる。
ほとんどは自分でベタ書きだけど、個人的にこの辺はマクロの記録を修正するか、ネットからのコピペで済ます
・背景色や罫線を変更する時
・グラフをvbaで制御したい時
0844デフォルトの名無しさん (アウアウキー Safb-ODP2)
垢版 |
2021/12/11(土) 10:04:25.41ID:U2WGKbTGa
早さじゃなく内容を優先しないから
つぎはぎだらけになるんじゃね
0847デフォルトの名無しさん (ワッチョイ 87ce-xLgN)
垢版 |
2021/12/11(土) 13:51:55.04ID:8HGqQjXT0
今は早さが最優先される時代だからね
民生アプリやゲームなんてバグだらけでもとにかくリリースして、オンラインでどんどんパッチを当ててく方式が主流になってる
0848デフォルトの名無しさん (スッップ Sdff-sCeO)
垢版 |
2021/12/11(土) 15:19:06.66ID:yDTfTX/Yd
馬鹿が作って混乱を引き起こすのがVBAです
0857デフォルトの名無しさん (ワッチョイ e701-p36F)
垢版 |
2021/12/11(土) 20:26:38.51ID:EpvuxOsQ0
一気に形勢逆転。
0859デフォルトの名無しさん (ワッチョイ a72d-xLgN)
垢版 |
2021/12/12(日) 12:04:50.97ID:fOYhEkbg0
ごめんなさい途中でかきこんでしまいました
VBAのコードが長いとセーブに時間がかかるとあったのでモジュールを削除してみましたが変化なし
そこで新規にbookを作ってコピペでVBAのコード他すべての要素をコピペしたら普通にセーブできたのですが
これはどういった原因が考えられるでしょうか?
ちなみに別のPCで使ってみたら普通にセーブできました
0862デフォルトの名無しさん (ワッチョイ 4768-PFkU)
垢版 |
2021/12/12(日) 13:52:38.61ID:Q+i1BsMe0
>>850
それな
で、職場で仕事がなくなる。なんだかよくわからん状態になる

>>859
ブックの中にゴミデータが溜まってる
・条件付き書式
・名前の定義
特に条件付き書式はコピペで増えるので要注意。vbaでコピペを繰り返すマクロを繰り返すうちに、恐ろしく重くなる事がたまによくある
0866デフォルトの名無しさん (ワッチョイ 7f56-kNbH)
垢版 |
2021/12/12(日) 21:54:32.69ID:2LaGAq5q0
>>837
> 一般的にデバッグはコーディングの10倍ぐらい経験や知識が必要な作業だから初心者には荷が重い


ものすごい納得がいく。プログラムの力のかなりな部分を
設計力とデバッグ力が占めてる気がする。
0869デフォルトの名無しさん (ワッチョイ 675f-p36F)
垢版 |
2021/12/12(日) 23:18:50.35ID:8ki8W4LJ0
超初心者です。
10個のブックで、それぞれのブックに同じ名前の4種類のシートがあり、
各シートのE10〜D12に入力されている値を抽出したいんですが、
1つのセルを指定するやり方しかわからず…

できれば10個のブックから一括で抜き取りたいんですけど、どう書けばいいでしょうか。
現時点でできたのはダイアログでファイルを選択して、指定のシートから1つだけ抜き出してくる方法です。
これを複数のセルを抜き出したい(可能なら複数のブック指定して抜き出したい)です。
0870デフォルトの名無しさん (スッップ Sdff-sCeO)
垢版 |
2021/12/13(月) 02:11:31.83ID:uyvq82Wrd
>>868
>>869
Ruby馬鹿
0871デフォルトの名無しさん (ワッチョイ 7fb0-ULLt)
垢版 |
2021/12/13(月) 03:17:35.02ID:XU8Ge+oP0
>>868
別のPCなら普通にセーブできるって言うから、PCの故障を疑ったんでしょう

862の回答だと、別のPCでうまくいく説明になってない

お前のほうが日本語理解できてないんじゃね?
0872デフォルトの名無しさん (ワッチョイ 87ce-xLgN)
垢版 |
2021/12/13(月) 03:32:37.10ID:fuRJ2q4u0
>>869
こんな感じで二重ループにする
ブック名やシート名は必要に応じて配列に入れておく

For Bok = 1 To 10
 For Sht = 1 To 4
  Range(" ") = Workbooks("ブック" & Bok).Worksheets("シート" & Sht).Range("D10:E12").Value
 Next
Next
0873デフォルトの名無しさん (ワッチョイ 67e6-zKou)
垢版 |
2021/12/13(月) 22:01:16.80ID:r5ZevJAL0
もう解決したかもしれんが
保存にやたら時間がかかるエクセルファイルとは自分の経験だと
非表示にされたシートに画像が貼られまくってたって事があったなvba開いてみたらシートが異常に多くて気づいた
パソコンリテラシーない人はこういうファイルを平気でメールで送ろうとするよねw
0875デフォルトの名無しさん (ドナドナー MM8f-9uXO)
垢版 |
2021/12/13(月) 22:45:39.93ID:kcZqxtmKM
ボタンのあるシートを
ボタン削除しないままシート削除して
新たにシートを作るっていうコードにしてたら
無茶苦茶ゴミが溜まってファイルが肥大化した挙げ句、
最終的にボタンを貼り付けられなくなった
0879デフォルトの名無しさん (ワッチョイ 7fda-ODP2)
垢版 |
2021/12/14(火) 18:25:23.35ID:xWxoPM4l0
ひとつに見えていても2つのボタンが重なっていることもあるぞ
0880デフォルトの名無しさん (ワッチョイ dff0-8/hI)
垢版 |
2021/12/15(水) 21:10:32.00ID:L38lsqXF0
VBAのchengeイベントで

セルB1に12、セルC1に3、と入力されたら
D1に12/3と日付が自動で出力され
かつ
C1が空白ならD1も空白
C1が文字ならD1も文字になるようにできるでしょうか?

初心者じみた質問で申し訳ありません
0886デフォルトの名無しさん (ワッチョイ 4768-PFkU)
垢版 |
2021/12/16(木) 01:36:42.92ID:B/UsaEnq0
>>883
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo finalty

'無限ループ回避
Application.EnableEvents = False

'C1セルが空白は終了処理へ
If Cells(1, 3) = "" Then GoTo finalty

'C1セルが文字列の場合は、そのまま放り込む。それ意外は日付
If WorksheetFunction.IsText(Cells(1, 3)) Then
Cells(1, 4).Value = Cells(1, 3).Value
Else
Cells(1, 4).Value = DateSerial(Year(Now()), Cells(1, 2), Cells(1, 3))
End If

'終了処理
finalty:
Application.EnableEvents = True

End Sub

とりあえず作ったけど、B1が文字列、c1が数字の時にエラーになるな
B1とC1で日付判定したほうがよかったのだろうか
0887デフォルトの名無しさん (ワッチョイ 7f8e-sCeO)
垢版 |
2021/12/16(木) 05:45:18.34ID:1S4Jwj7Q0
>>886
「できるでしょうか?」と聞かれているだけなのに引っ掛かる馬鹿
0891デフォルトの名無しさん (ブーイモ MM8f-LZWr)
垢版 |
2021/12/16(木) 07:46:05.41ID:oEqQwjzjM
そっか

>>886 だけど空白なら終了よりも空白の時は出力先も空白って条件があるから出力先にClearContentsかけた方が良さそう
その後にB1とC1をそれぞれIsNumericでTrueならB1 & "/" & C1をDatevalueで日付データにして出力先へ
あとはElseで文字列として結合して出力とかどうだろう?
0892デフォルトの名無しさん (ワッチョイ df01-JVtf)
垢版 |
2021/12/16(木) 08:42:17.59ID:Ymr34XoE0
>>886
・「C1が空白ならD1も空白」にしないといけないのにやってない
・B1, C1 以外のセルが変更された場合でも無駄な処理が走る
・Cells( ) と Cells( ).Value とバラバラ
・finalty という単語はない
0893デフォルトの名無しさん (ワッチョイ a701-4A0X)
垢版 |
2021/12/16(木) 09:06:16.32ID:80W3ywqF0
>>892
まあ多少エラーがあっても大まかな流れがわかればいいんでねえの?
後は自力だろ
特にエラー処理関連は条件がわからないとやっても無駄だし

>・finalty という単語はない
まずこっから突っ込まないと
>>880
>VBAのchengeイベントで
0895デフォルトの名無しさん (スプッッ Sd7f-5T9c)
垢版 |
2021/12/16(木) 10:48:42.97ID:ueoAX3Xed
>>883
早速のご返答ありがとうございます
とりあえずB1には文字型は入力されないので、教えて頂いた構文で試してみたいと思いますよ
スレの雰囲気悪くしてすいません
先生たちには
感謝します
0896デフォルトの名無しさん (アウアウキー Safb-ODP2)
垢版 |
2021/12/16(木) 12:11:49.85ID:CWgWh06Ba
足フェチ
0898デフォルトの名無しさん (ワッチョイ e701-w2+9)
垢版 |
2021/12/16(木) 20:27:23.55ID:Y2CVy/MB0
Gotoトラベル。
0900デフォルトの名無しさん (ワッチョイ df4f-Xngn)
垢版 |
2021/12/16(木) 21:57:52.03ID:jTOt4wzg0
VB.Netでもgotoとかgosubとかremとか残ってるんだよなぁ
いつになったらこんな負の遺産使えなくするのやら
variantとか早々に消したくせに

先にVB.Netの方が消えてしまいそうだ
0902デフォルトの名無しさん (ワッチョイ dfe6-DXiY)
垢版 |
2021/12/16(木) 22:40:48.14ID:mHaEbFg60
https://sugoikaizen.com/excel_list/vba-macro-01/
超初心者です。上のサイトを参考に非表示のシートを全表示にするようにしたいのですが、実際に使ってみるとアクティブシート?が切り替わって切り替わってチカチカしてしまいます。

その切り替わりのチカチカ、アクティブを切り替えないでシートを表示させることってできますか
0904デフォルトの名無しさん (ワッチョイ 4768-PFkU)
垢版 |
2021/12/16(木) 23:49:36.74ID:B/UsaEnq0
>>892
・「C1が空白ならD1も空白」にしないといけないのにやってない
すまん
・B1, C1 以外のセルが変更された場合でも無駄な処理が走る
ifで分岐させてinsideかInspectorでexitsubだ
・Cells( ) と Cells( ).Value とバラバラ
すまん
・finalty という単語はない
たいぽ

>>897
>Go Toとか草
vbaはエラー処理がエグいので、gotoを使う方が簡潔になる
今回のように、分岐処理が型に依存するような時はあえてエラーを発生させて、gotoでまとめる方が楽
総論としては「trycatch欲しい」だろうな
0906デフォルトの名無しさん (ラクッペペ MMe6-HGpq)
垢版 |
2021/12/17(金) 00:50:02.02ID:6ayQmUSdM
行番号はDOS自体が登場する以前のROM BASIC全盛の頃の話
Microsoft BASICの独自拡張版を各メーカーが移植して搭載してた
FDD普及後も暫くはN88 BASICなどは生き残っていたけどDOS登場後は急速に廃れていった
0912デフォルトの名無しさん (ワッチョイ be2c-TeJl)
垢版 |
2021/12/17(金) 12:43:48.01ID:tWB5K5S10
UTF-8 でも、BOM の有無で2種類ある。
先頭3バイトが「0xEF 0xBB 0xBF」なら、BOM有り

BOM有りUTF-8
BOM無しUTF-8(UTF-8N)

Windows だけはBOM有りだけど、
一般的に、Linux などのウェブではBOM無し

最近のWindowsでは、BOM無しも使えるかも知れない
0913デフォルトの名無しさん (ワッチョイ 4af0-g56a)
垢版 |
2021/12/17(金) 16:33:33.43ID:ggdkHu5b0
>>904
先日教えていただいた構文は間違いですか?
今、試したら自分のイメージに近い動作はするような感じです
後は自分で試行錯誤してみたいです

また質問してしまうかもしれませんが
自力でやってみます
0914デフォルトの名無しさん (ワッチョイ 268c-HHCY)
垢版 |
2021/12/17(金) 20:46:33.62ID:XfO8F9WV0
空白でないセルの末尾に「様」という文字列を一括追加するマクロを教えてください
置換処理も組み込んで一括で処理したいのでマクロでやりたいです
出来ればコピペで使えるとありがたいです
環境はWin10でExcel2016です
よろしくお願いします
0917デフォルトの名無しさん (ワッチョイ be8e-qezp)
垢版 |
2021/12/17(金) 21:12:38.32ID:ptO1GC2n0
いつものあいつの釣りとあまりに馬鹿過ぎる質問はお断りです
また、Excelの使い方すらわからない人はお帰りください
0918デフォルトの名無しさん (ワッチョイ 4f68-FJAE)
垢版 |
2021/12/17(金) 22:36:33.99ID:V6YMPjTu0
>>914
俺も>>915と同意見で、関数かオートフィルでいいと思う。常時必要なら、関数の作業列を作ってそれを参照するとか
それでもいいなら

A列が名前の場合。

Sub Macro3()
最終行 = Cells(Rows.Count, 1).End(xlUp).Row
For i = 最終行 To 1 Step -1
If Cells(i, 1).Value <> "" Then Cells(i, 1).Value = Cells(i, 1).Value & "様"
Next
End Sub
0920デフォルトの名無しさん (ワッチョイ 4f68-FJAE)
垢版 |
2021/12/17(金) 22:48:52.62ID:V6YMPjTu0
>>919
まぁこれは直接書き換える案件じゃないんだよな
名前列 & (”様”|"御中")が良い

このやり方だと、最後が「様」で終わる名字があるとバグるんだよな。昔、「羽様」って顧客からクレームがあって「いいんですけどね・・・」って感じだった
まぁ、珍しい名前だしいいと思う
0921デフォルトの名無しさん (ワッチョイ 4f68-FJAE)
垢版 |
2021/12/17(金) 23:07:41.06ID:V6YMPjTu0
>>913
致命傷は一点

・「C1が空白ならD1も空白」にしないといけないのにやってない
以下のコードで直した

・B1, C1 以外のセルが変更された場合でも無駄な処理が走る
重い処理じゃない。どうせ入力箇所増える
重いなら>>904の内容で修正するか再度聞けば良い

・Cells( ) と Cells( ).Value とバラバラ
どうでもいい
Cells( )はCells( ).Valueに解釈される
暇なら統一すれば良い。特に意味はない

・finalty という単語はない
どうでもいい
もちろんfinalityの打ち間違えは認める
変数名なんてなんでもいい

自己弁護でもないが、そのためにも関数やクラスは影響が最小限に済むように、短くまとめる必要がある
0924デフォルトの名無しさん (ワッチョイ 4f68-FJAE)
垢版 |
2021/12/18(土) 00:00:59.23ID:K0Bjo2m80
>>921
のコード書き忘れてたわ

Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo finalty

'無限ループ回避
Application.EnableEvents = False

'C1セルが空白は終了処理へ
If Cells(1, 3) = "" Then
Cells(1, 4) = ""
GoTo finalty
End If
'C1セルが文字列の場合は、そのまま放り込む。それ意外は日付
If WorksheetFunction.IsText(Cells(1, 3)) Then
Cells(1, 4).Value = Cells(1, 3).Value
Else
Cells(1, 4).Value = DateSerial(Year(Now()), Cells(1, 2), Cells(1, 3))
End If

'終了処理
finalty:
Application.EnableEvents = True

End Sub
0925デフォルトの名無しさん (ワンミングク MMda-+zQR)
垢版 |
2021/12/18(土) 00:34:19.89ID:fI0CXnXAM
またいつものあいつに引っ掛かる馬鹿ども
0926デフォルトの名無しさん (ワッチョイ 6a4f-j66Y)
垢版 |
2021/12/18(土) 03:53:23.76ID:RSZ8HegY0
>>914
Sub hoge()
Dim targetRange As Range
Dim targetCell As Range

Set targetRange = ThisWorkbook.Sheets(Sheet1.Name).Range("A1:J10")
For Each targetCell In targetRange.Cells
If targetCell.Value <> vbNullString Then
If Right(targetCell.Value, 1) <> "様" Then
targetCell.Value = targetCell.Value & "様"
End If
End If
Next

End Sub

対象シートを変えるならSheets(Sheet1.Name)のSheet1の部分を変えてくれ
シート名じゃなくてシートのオブジェクト名であることに注意な。
今はA1から下10セル、右10セルの範囲に絞っているが、変えたければ
Range("A1:J10")の部分を変えてくれ。
0934デフォルトの名無しさん (ワッチョイ a301-izju)
垢版 |
2021/12/18(土) 10:30:58.78ID:S/VVluSn0
量子の世界では1未満は確率的に存在するんだよ。
0939デフォルトの名無しさん (ワッチョイ a301-izju)
垢版 |
2021/12/18(土) 14:28:51.14ID:S/VVluSn0
だいえーだいえーいえぃいえぃいえぃいえぃ。
だいえーとってもいえぃいえぃいえぃいえぃ。
↓続き。
0940デフォルトの名無しさん (ワッチョイ 0f2f-j66Y)
垢版 |
2021/12/18(土) 14:43:23.05ID:yfxR8FS90
>空白でないセルの末尾に「様」という文字列を一括追加
これ、今「様」がついてたらつけるなっていう要件じゃないんじゃね
そうじゃないなら、羽様が、羽さん様なのか羽様さんなのか区別できるデータじゃないと不可能だぜ

普通に考えて名称と敬称と分けてもつだろ
0944デフォルトの名無しさん (ワッチョイ a301-izju)
垢版 |
2021/12/18(土) 19:06:22.48ID:S/VVluSn0
もしかしてお前らダイエー知らないの?
0946デフォルトの名無しさん (ワッチョイ a301-izju)
垢版 |
2021/12/18(土) 20:24:25.92ID:S/VVluSn0
それはダイエーじゃなくて地獄甲子園。
0947デフォルトの名無しさん (ワッチョイ 6a01-zVPI)
垢版 |
2021/12/18(土) 21:06:03.74ID:XqEkP9jw0
もう25年前に近くのダイエーなくなってダイクマになった(もうそれもなくなってマンションになってるけど)
一駅先にグルメシティの形で残ってるけどほとんど行かない
0948デフォルトの名無しさん (ワッチョイ a301-izju)
垢版 |
2021/12/18(土) 21:30:26.72ID:S/VVluSn0
ヒントもう無いの?
0949デフォルトの名無しさん (ワッチョイ a301-izju)
垢版 |
2021/12/18(土) 21:39:28.14ID:S/VVluSn0
ここまでの情報で、神奈川県秦野市ではないか?と自作AIがはじき出しましたが。
あってる?
0951デフォルトの名無しさん (ワッチョイ a301-izju)
垢版 |
2021/12/18(土) 21:45:33.86ID:S/VVluSn0
おおおお!!
あってた!!
0952デフォルトの名無しさん (スフッ Sd8a-kSWT)
垢版 |
2021/12/18(土) 21:47:56.30ID:ruUAvqsCd
神奈川県秦野市の東海大学前のグルメシティは、元は忠実屋というスーパーだった
ダイエーに買収された後グルメシティに変わった
ステッカーの下には今でも忠実屋のロゴマークが残ってる
店の床に小さい段差があるのは増築した痕跡
0956デフォルトの名無しさん (アウアウキー Safb-fxsa)
垢版 |
2021/12/19(日) 02:09:49.49ID:WKKxXwhHa
左様でござるか
0958デフォルトの名無しさん (ワッチョイ 4af0-g56a)
垢版 |
2021/12/19(日) 07:00:08.37ID:LtRjW0Zk0
A1に月、B1に最初の日、B2に最後の日を入力したら
C列に最初の日から最後の日まで書き出され
D列には月/日が書き出されるようにしたいのですが

例えば
A     B     C      D
12    19   19    12/19
      22   20    12/20
           21    12/21
           22    12/22


上記のように各セルがチェンジイベントで動作してくれればと

それと文字などがB2に入力された場合は文字をC2、D2に反映したいです


A     B     C      D
12    19   19    12/19
       h  h h

ここで色々お教えいただきそれらの構文を自分なりに組み合わせてみたのですが
初心者の私にはレベルが高すぎるようで・・・

今までご親切にお教えいただいた構文を生かしてなく申し訳ありません。
0959デフォルトの名無しさん (ワッチョイ 4af0-g56a)
垢版 |
2021/12/19(日) 07:01:14.70ID:LtRjW0Zk0
>>958
> A1に月、B1に最初の日、B2に最後の日を入力したら
> C列に最初の日から最後の日まで書き出され
> D列には月/日が書き出されるようにしたいのですが
>
> 例えば
> A     B     C      D
> 12    19   19    12/19
>       22   20    12/20
>            21    12/21
>            22    12/22
>
>
> 上記のように各セルがチェンジイベントで動作してくれればと
>
> それと文字などがB2に入力された場合は文字をC2、D2に反映したいです
>
>
> A     B     C      D
> 12    19   19    12/19
>        h  h h
>
> ここで色々お教えいただきそれらの構文を自分なりに組み合わせてみたのですが
> 初心者の私にはレベルが高すぎるようで・・・
>
> 今までご親切にお教えいただいた構文を生かしてなく申し訳ありません。
0961デフォルトの名無しさん (ワッチョイ 4af0-g56a)
垢版 |
2021/12/19(日) 07:04:33.84ID:LtRjW0Zk0
>>959
> >>958
> > A1に月、B1に最初の日、B2に最後の日を入力したら
> > C列に最初の日から最後の日まで書き出され
> > D列には月/日が書き出されるようにしたいのですが
> >
> > 例えば
> > A     B     C      D
> > 12    19   19    12/19
> >       22   20    12/20
> >            21    12/21
> >            22    12/22
> >
> >
> > 上記のように各セルがチェンジイベントで動作してくれればと
> >
> > それと文字などがB2に入力された場合は文字をC2、D2に反映したいです
> >
> >
> > A     B     C      D
> > 12    19   19    12/19
> >        h      h       h
> >
> > ここで色々お教えいただきそれらの構文を自分なりに組み合わせてみたのですが
> > 初心者の私にはレベルが高すぎるようで・・・
> >
> > 今までご親切にお教えいただいた構文を生かしてなく申し訳ありません。
0963デフォルトの名無しさん (ワッチョイ 2ffd-v8OD)
垢版 |
2021/12/19(日) 07:40:00.27ID:F1jZtUeQ0
必要な仕様が足りない
・B2よりB1が大きい場合は動作しない?それとも翌月のその日までを記載?
・B1,B2に入力された数値が日付として有り得ない場合はどうする?動作しないだけでよいのか?
・年の判定はどうする?現在の年を使用してよいのか?
0966デフォルトの名無しさん (ワッチョイ 4af0-g56a)
垢版 |
2021/12/19(日) 15:48:07.81ID:LtRjW0Zk0
>>963
> 必要な仕様が足りない
失礼しました
> ・B2よりB1が大きい場合は動作しない?それとも翌月のその日までを記載?
B1の方が大きければ空白になってくれればいいのですが
エラー表示がセルに表示されてもエラーはエクセルの設定で空白にできるので大丈夫かと思っています

月をまたぐことはありません

> ・B1,B2に入力された数値が日付として有り得ない場合はどうする?動作しないだけでよいのか?
122/111や12/35と表示されてもかまいません
文字が入力されてもそのまま表示したいです

> ・年の判定はどうする?現在の年を使用してよいのか?
年は考慮しなくても大丈夫です
長くて一週間の予定だけでしか使用しません

説明下手ですいません (汗 
0970デフォルトの名無しさん (ワッチョイ dabd-6dU9)
垢版 |
2021/12/19(日) 18:27:21.36ID:pq+sPc2G0
あるソフトウェアが出力する
ログファイル(テキストファイルで行数は不定)をスペース区切りで文字列として読み込むコードを書いているのですが
ログファイルの先頭行のスペースの数が一定ではなく
単純に読み込むと先頭の数値が
A列目に入ったりB列目、C列目に入ったりして困っております

連続するスペースを一つのデリミタとして扱うか
(そうすればA列だけが空白になる)
もしくは先頭に連続して入っているスペースを無視する方法を探しているのですが見当たりません

皆様のお力添えをお願い致します
0971デフォルトの名無しさん (ワッチョイ dabd-6dU9)
垢版 |
2021/12/19(日) 18:43:59.87ID:pq+sPc2G0
>>970
自己レス

> 連続するスペースを一つのデリミタとして扱うか
> (そうすればA列だけが空白になる)

この方法は使えない事に気づきました
ログファイルの先頭(左端)
に数値が入っている場合もあるので
スペースが一つでも入っている場合では、入力される列が
A列とB列に変わってしまいます

先頭(左端)に連続して入っているスペースを無視する方法しか
無いかもしれません
0973デフォルトの名無しさん (ワッチョイ be8e-qezp)
垢版 |
2021/12/19(日) 19:02:03.97ID:oG6IuvVy0
ルビー基地外だぞ
0975デフォルトの名無しさん (ワッチョイ dabd-6dU9)
垢版 |
2021/12/19(日) 19:08:52.05ID:pq+sPc2G0
連続レス申し訳ありません

必要な処理はもうちょっと複雑でした
GetOpenFilenameで開いたファイルを
Workbooks.Open(FileN,Format:=3,ReadOnly:=True)
で処理しているのですが
ログファイルの行中に連続して入っているスペースも一つずつカウントして空白列を作ってしまいます

必要な処理は
1) 連続したスペースを一つのデリミタとして区切り
2) 行先頭にスペースが入っていた場合は最初の文字が始まるまで削除もしくは無視する

といったものになると思います
何卒ご助力お願い致します
0977デフォルトの名無しさん (ワッチョイ dabd-6dU9)
垢版 |
2021/12/19(日) 20:17:13.17ID:pq+sPc2G0
皆様ご回答ありがとうございます

>>972
ありがとうございます
正規表現は私にはちょっと敷居が高いようです

>>974
ありがとうございます
LTRIMで一度先頭スペースを抜いた中間ファイルを作るというのは
一つの手順としてあるかと思います

>>976
ありがとうございます
途中でエラーメッセージ行とかが
入るので全ての行が固定長
と言うわけではないのですが
データを処理したい行は固定長に近いです
問題は処理したい行の先頭に0〜3個のスペースが入ることです
0978デフォルトの名無しさん (ワッチョイ 3b01-jbri)
垢版 |
2021/12/19(日) 20:33:08.86ID:Ax4UFlXX0
>>975
1行ずつ読み込んで事前処理するのがいいんじゃね
------------------------
行=1
列=1
Open filename for Input as #1
Do until EOF(1)
Line Input #1, str '一行ずつ読み込み
str=Trim(str) '両端の空白除去
arr=Split(str," ") '空白で分割し配列に格納
for i=1 to arr.Ubound(arr) 'セルに書き込み
Cells(行,列+i).Value=arr[i]
next i
行=行+1
Loop
close #1
-----------------------------
0980デフォルトの名無しさん (ワッチョイ 2ffd-izju)
垢版 |
2021/12/19(日) 20:44:00.34ID:F1jZtUeQ0
>>966
Private Sub Worksheet_Change(ByVal Target As Range)

Application.EnableEvents = False
If Not Intersect(Target, Union(Me.Range("A1"), Me.Range("B1"), Me.Range("B2"))) Is Nothing Then

If Me.Range("A1").Value <> "" And Me.Range("B1").Value <> "" And Me.Range("B2").Value <> "" Then

Me.Columns(3).ClearContents
If Me.Columns(3).NumberFormatLocal <> "@" Then Me.Columns(3).NumberFormatLocal = "@"

If IsNumeric(Me.Range("A1").Value) And IsNumeric(Me.Range("B1").Value) And IsNumeric(Me.Range("B2").Value) And Me.Range("B1").Value <= Me.Range("B2").Value Then

Dim OutAry() As String
ReDim OutAry(Me.Range("B1").Value To Me.Range("B2").Value)

Dim RowCnt As Long
For RowCnt = LBound(OutAry) To UBound(OutAry)
OutAry(RowCnt) = Me.Range("A1") & "/" & RowCnt
Next RowCnt

Range(Me.Cells(1, 3), Me.Cells(UBound(OutAry) - LBound(OutAry) + 1, 3)).Value = WorksheetFunction.Transpose(OutAry)

End If

End If

End If
Application.EnableEvents = True

End Sub
0981デフォルトの名無しさん (ワッチョイ dabd-6dU9)
垢版 |
2021/12/19(日) 20:57:27.62ID:pq+sPc2G0
>>978
ありがとうございます

私も一行ずつ処理するべきなのかと思い始めました

その際
----------------
arr=Split(str," ") '空白で分割し配列に格納
----------------
だとデータ行中に空白が連続している場合
例えば
a b c d
のような場合でも
A列→a
B列→b
C列→c
D列→d
のように入力可能でしょうか?
0984デフォルトの名無しさん (ワッチョイ be2c-j66Y)
垢版 |
2021/12/19(日) 21:39:11.49ID:EkrjUmtA0
Ruby なら、abc の前後・間に、複数の連続した空白類があっても、分割できる

Ruby で,文字列を空白文字類や「.」などを区切りとして切り出す
https://www.kkaneko.jp/pro/ruby/tokenize.html

str = " a b c "

p str.split( nil )
p str.strip.split( /\s+/ )
p str.strip.split( /[ |\t|\r|\n|\f]+/ )

これらはすべて、["a", "b", "c"] となる

空白類・\s は、[ |\t|\r|\n|\f] の5種類の空白を含む。
strip は、文字列の先頭・末尾から、連続した空白類を除去する
0986デフォルトの名無しさん (ワッチョイ 4af0-g56a)
垢版 |
2021/12/19(日) 21:51:18.70ID:LtRjW0Zk0
>>980
すみません
今試してみました
C列には期間の日が表示され
D列には機関の月日が表示され

仮にB2に文字が入力されたら
C2とD2には文字が表示され
C1とD1には日と月日が表示したいです

私にはなにをどうしたらいいのかまったくわかりませんでした
技術的にむずかしいでしょうか?
ググってみましたが出来そうにないです
0987デフォルトの名無しさん (ワッチョイ 3b01-jbri)
垢版 |
2021/12/19(日) 22:12:20.36ID:Ax4UFlXX0
>>981
その場合はtrim, splitの替わりに正規表現使うのがいいかと
dim reg as new regexp
reg.global=true
reg.pattern="(\S+)" '空白以外
set mc=reg.execute(str)
for i to mc.count-1
set m=mc.item(i)
cells(1,i).value=m.value
next i
0989デフォルトの名無しさん (ワッチョイ be8e-qezp)
垢版 |
2021/12/19(日) 23:23:16.74ID:oG6IuvVy0
相変わらずRuby基地外に引っ掛かる馬鹿ども
0990デフォルトの名無しさん (ワッチョイ dabd-6dU9)
垢版 |
2021/12/19(日) 23:33:22.46ID:pq+sPc2G0
>>983

ありがとうございます
やってみます

>>984
ありがとうございます
さすがにExcelで処理しているファイルをVBA以外で制御するのは無理です

>>987
ありがとうございます
正規表現は敷居が高い(奥深すぎ)ので敬遠していましたが
そのコードを手がかりに解析してみます

a b c d
a b c d
a b c d

のような場合でも
そのコードは使えますでしょうか?
0991デフォルトの名無しさん (ワッチョイ dabd-6dU9)
垢版 |
2021/12/19(日) 23:36:15.57ID:pq+sPc2G0
>>988
ありがとうございます

この場合も処理可能でしょうか?
a b c d
a b c d
a b c d
0992デフォルトの名無しさん (ワッチョイ bee6-eGgJ)
垢版 |
2021/12/19(日) 23:41:22.83ID:kIFouMiR0
ファイルを開いてVBAで処理する系は
VBAのエディタがアップデート放棄しててユニコードに対応しないらしいのでやめた方がいいかも

Regexpでユニコード文字列を置き換える処理をこさえたりすればなんとかなるかもしれないが
0993デフォルトの名無しさん (ワッチョイ dabd-6dU9)
垢版 |
2021/12/19(日) 23:51:29.72ID:pq+sPc2G0
>>992
ご注意ありがとうございます
私の場合であれば処理するlogは
ASCIIのみなので問題ないかと思います
0995デフォルトの名無しさん (ワッチョイ 2ffd-v8OD)
垢版 |
2021/12/20(月) 01:39:15.08ID:jnlr9GaR0
>>986
ごめん
ちょっと何を言っているのか分からないからもう少し整理してから言葉にして
文字列や日付として破綻しているものでも可なのにその期間を出力せよっていうのはどういう意味?
仕様がちぐはぐで何をしたいのかが分からない

出力列を増やすのはのは対して手間は変わらないから自分でアレンジして
分からないならもっと基礎の部分を勉強するか諦めて関数式書いた方が早いよ
0999デフォルトの名無しさん (ワッチョイ 4af0-g56a)
垢版 |
2021/12/20(月) 21:13:06.47ID:1VhmJElm0
>>995
すいません
関数を使ってみたいとおもいます
これか自分で勉強しレベルを上げていきたいと思います
あなたのおっしゃるとおりだと思います
今までお教えいただいたことを参考に
勉強していきたいと思います
ここの先生たちには本当に感謝しています
1000デフォルトの名無しさん (スッップ Sd8a-qezp)
垢版 |
2021/12/20(月) 21:21:42.29ID:XrZMAyhid
いつものあいつ
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 98日 13時間 51分 43秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


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

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

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

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

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