X



Excel VBA 質問スレ Part73

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

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

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

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

割り切りとして「このマクロを使ったらフィルタは解除されますが情報は最新化されます」くらいにしとくのが無難かと
2021/09/14(火) 21:57:16.30ID:zgsbOTDxH
作業シートにコピペしてから処理すれば?
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
2021/09/14(火) 23:56:12.55ID:OBquwEh60
>>14
UserForm top left でググッたらこんなページがhttps://www.officepro.jp/excelvbaform/form_form/index4.html
検証してないけど試してみたらどうですかね
16デフォルトの名無しさん (ワッチョイ 2a05-0MLo)
垢版 |
2021/09/15(水) 00:23:15.17ID:8Tg1g6H40
>>15
UserForm top left セルの位置 でググったら
完璧なTipsがありました!
検索のヒントをありがとうございました!
2021/09/15(水) 00:48:53.61ID:YsJqQLCb0
どーでも良い質問なんだが、VBAからエクセルのセルに値を入れるときの表現について
意見が割れてるので、みんながどー表現してるか知りたい

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

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

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

String型の変数に文章を代入しています
その変数が「は」を助詞として使用しているかを検出し、その「は」が何文字目に記載されているかを抽出したいです
判定式はどの様に組むのが良いでしょうか
2021/09/15(水) 12:16:58.05ID:ggl3y/Wm0
>>22
これが使えるんじゃないかな。
https://qiita.com/mima_ita/items/bc2aeb060ee12d280d7b
2021/09/15(水) 12:26:39.15ID:ggl3y/Wm0
こちらの下の方に具体的に品詞の判定方法がある。
http://www.excel.studio-kazu.jp/kw/20201108202429.html
2021/09/15(水) 14:02:58.42ID:XT7xZlnV0
是非とも
「はははははは、ははのはははははははと笑う」で
挙動確認を行なって欲しい案件だな
2021/09/15(水) 16:06:38.48ID:5d7y3fL1M
>>17
> A1セルに 123 を出力するという表現を使うか、A1セルに 123 を入力するという表現を使うか、どっち?
俺なら「A1セルに 123 を書き込む」かな
シートはストレージみたいなものなのと思ってるので出力とか入力って言うのはなんか違和感ある
2021/09/15(水) 16:59:13.14ID:3TKYe9Fz0
VBA側を主体に書いているなら(シートに)出力
シート側を主体にかいてるなら(VBAから)入力
だな

VBAの仕様書でVBA側を主体にしないのはどうかと思うが
(マクロ付き)エクセルの仕様書だと考えればまあ入力でもいいのかも
28デフォルトの名無しさん (ワッチョイ 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で抽出するいい方法はあるでしょうか?
2021/09/16(木) 00:13:25.85ID:/erdykE4H
>>28
Sub ネットワーク名取得()
  With CreateObject("MSXML2.XMLHTTP")
    .Open "GET", "https://whois.nic.ad.jp/cgi-bin/whois_gw?key=182.22.16.251";, False
    .Send
    For Each s In Split(.responseText, vbLf)
      If InStr(s, "ネットワーク名") Then Debug.Print s
    Next
  End With
End Sub
2021/09/16(木) 00:59:42.68ID:5Hx4RpZ/0
一生使うことのなさそうなCreateObjectだな
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
2021/09/16(木) 01:51:47.59ID:YFUf0QLVM
なぜRuby
2021/09/16(木) 02:01:13.02ID:FMosLWBbd
スレタイも質問も読めないRubyバカ
34デフォルトの名無しさん (ワッチョイ 5e68-gxqX)
垢版 |
2021/09/16(木) 06:38:12.58ID:COWrCKXD0
利用者数激減の言語
それがruby
2021/09/16(木) 08:25:21.24ID:J7QCCEb9M
>>32-34
相手すんなよ…
2021/09/16(木) 08:25:49.50ID:3isIfw030
>>17
なるほど仕様書の問題か
ならば現場内で紛らわしくないような記載のルールを作ればいいかな。
例えばユーザーが手打ちで設定する場合は「入力」
VBAで書き込む場合は「出力」または「設定」

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

そういう時は大まかな流れ図みたいなもの書いて添付して紛らわしさを回避するのも一つの手だよ。
2021/09/16(木) 11:33:48.95ID:0wHWe9CF0
質問への回答ありがとう
>>17の質問者です

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

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

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

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

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

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

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

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

よろしくお願い申し上げます。
2021/09/16(木) 17:42:26.31ID:3abSZdzaM
俺が馬鹿なだけかもしれねぇけど何をしたいのかがさっぱり分からない
2021/09/16(木) 18:02:43.18ID:nCqRUFyPM
スクレイピングしたいんだろ
そのデータをどう扱うかによるわな
2021/09/16(木) 18:31:48.90ID:sOgFGA/J0
というかMAC版のEXCELってVBA使えるの?
あとスクレイピング用のコンポーネントも
45デフォルトの名無しさん (ラクッペペ MM3e-oWuh)
垢版 |
2021/09/16(木) 18:41:42.01ID:EvK5hxPzM
他のツールでデータを集めて
結果をExcelにするのが良いよ
csvでもいいんじゃね?
2021/09/16(木) 19:07:04.50ID:Az+Wn1Ze0
>>41
htmlから簡単なスクレイピングならPower Queryがとっつきやすいかと。
URLのリンク先がcsvやExcelファイル、pdfファイル、
GitHubにあるJSONなんかもこれで結構いける。

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

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

一番いいのはyahoo APIなどのAPIを使う事
2021/09/16(木) 20:21:31.16ID:3isIfw030
MacのOfficeソフトとRubyには期待するなって
死んだばあちゃんが言ってた
49デフォルトの名無しさん (ワッチョイ 9e8c-xZL4)
垢版 |
2021/09/16(木) 20:24:24.60ID:MqGeVsp10
Macには無料で今流行りのPythonがついているそうなので
スクレイピンクはそっちの方が遥かに簡単じゃないかな
ExcelVBA経験がないのなら
2021/09/16(木) 20:45:30.18ID:B6OYbZSR0
>>48
ばあちゃんハイカラやな
2021/09/17(金) 03:52:03.83ID:O1PoA15N0
Rubyist は、たいていMac

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

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

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

YouTube API とか、Google Maps API とか、
株式相場などもそう
2021/09/17(金) 11:36:45.56ID:D2cYhIKk0
>>41
なんでできもしないことやろうとすんのかね
検索してもわからないんじゃ無理だろ
2021/09/17(金) 12:01:52.56ID:Y3MPn8p/0
できないことをやらないと
いつまでたっても何もできないのだが、、、
54デフォルトの名無しさん (ワッチョイ ffba-fv4A)
垢版 |
2021/09/17(金) 18:44:11.62ID:xtR/7aZz0
>>29, 31
ありがとうございました。
2021/09/17(金) 20:27:29.50ID:ZtM+Yv2y0
見えないものを見ようとして望遠鏡を覗き込んだら捕まった事例
56デフォルトの名無しさん (アウアウウー Sa5b-4fkB)
垢版 |
2021/09/17(金) 20:40:10.73ID:7ovEcO6ia
>>53
おまえが出来ないのは自業自得
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,"
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,"
59デフォルトの名無しさん (ワッチョイ 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
60デフォルトの名無しさん (ワッチョイ bf8c-V+sB)
垢版 |
2021/09/17(金) 23:08:43.51ID:VKkEr3i80
255文字
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"
2021/09/18(土) 09:25:55.38ID:85XqBE5T0
>>61
ありがとうございます。シート名を削除したら動きました
2021/09/18(土) 09:39:13.68ID:iFpkyoTBa
>>62
横から失礼
RangeはUnionにすると実質文字制限がなくなる
2021/09/18(土) 10:16:04.89ID:jMbZYEP4H
>>63
引数はRangeじゃなくてStringなんよ
65デフォルトの名無しさん (ワッチョイ bf8c-V+sB)
垢版 |
2021/09/18(土) 12:10:53.45ID:vNZ9H73d0
名前定義ってRangeオブジェクトからでもできるのか 知らなかった
Range("B1:G10").Name = "Nyuuryoku2"
2021/09/18(土) 12:26:09.80ID:FfOi19ZE0
便利だけどExcelの名前の定義ウインドウは使いにくすぎる
2021/09/18(土) 12:26:47.71ID:FfOi19ZE0
つまりたくさん定義すると管理しにくいんだよな
68デフォルトの名無しさん (ワッチョイ bf8c-V+sB)
垢版 |
2021/09/18(土) 16:41:01.37ID:vNZ9H73d0
名前の管理を簡単にする便利なアドインって誰か作ってないの?
(とおねだり)
2021/09/18(土) 18:23:53.93ID:B91oASHcM
簡単の意味を定義してくれれば俺が作ってやるよ。
2021/09/18(土) 18:33:26.51ID:y+KnaSW50
表形式ならテーブルでOK
名前の定義使わなくても
2021/09/18(土) 18:45:25.50ID:+/kaLHzEM
>>69
俺が思った通りに名前を定義してくれて、不要な名前は勝手に知らない間に削除してくれるとかかな
当然 >>57-59>>61 程度の変換は自動でやる
2021/09/18(土) 18:49:07.44ID:FfOi19ZE0
ちょっとぐぐったけど
NamesコレクションをForEachで回してユーザーフォームにでも表示させれば作れそうだな
2021/09/19(日) 00:12:03.29ID:zQBxj3q40
>>71
めちゃくちゃ簡単だな。任せとけ。
2021/09/19(日) 05:13:48.14ID:AGA6cOjvM
おう、頼んだぞ
2021/09/19(日) 10:09:24.37ID:IfToBfi40
Internet Explorer_Serverのハンドルから取得したIHTMLDocumentオブジェクトではそのページ内での操作はできましたが
Navigate実行時にメソッドをサポートしていないというエラーになります
別のURLへ移動する方法ありますか?
2021/09/19(日) 12:24:27.96ID:jno0wMDOH
>>75
たぶんメソッドの使い方が間違ってる
デバッグしてやるからコード晒してみ
77デフォルトの名無しさん (アウアウウー Sa5b-hED7)
垢版 |
2021/09/19(日) 12:45:26.42ID:/yxUr6Cya
IEのオプションでcssの設定を変える
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
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
2021/09/19(日) 14:13:18.62ID:qcTxghfBM
gethtmldocumentにnavigateあるのか?
81デフォルトの名無しさん (ワッチョイ bf8c-xsW+)
垢版 |
2021/09/19(日) 21:14:40.95ID:+Er1+t3H0
navigateじゃなくてcreateDocumentFromUrlじゃないの?
知らんけど
82デフォルトの名無しさん (ワッチョイ 9f6b-W1il)
垢版 |
2021/09/20(月) 00:12:39.27ID:wP8fgZ+m0
A1からA10000にデータが有って検索したい文字列があったとする。
この場合,範囲をdictionaryで調べるのと配列で調べるのは速度は同じぐらい??
2021/09/20(月) 00:16:46.79ID:GQS+gMma0
なぜ自分で試さないのか
2021/09/20(月) 02:45:51.50ID:KDTpyD+cH
>>82
データがセルに入ってるならワークシート関数使った方が速い
85デフォルトの名無しさん (ワッチョイ 9f6b-W1il)
垢版 |
2021/09/20(月) 10:43:06.46ID:wP8fgZ+m0
えっ?そうなの??
86デフォルトの名無しさん (ワッチョイ 9f6b-W1il)
垢版 |
2021/09/20(月) 10:44:41.60ID:wP8fgZ+m0
試しましたが、
コードはdictionaryのほうがすっきりした。
体感速度はあまり変わりませんでした。
2021/09/20(月) 10:54:05.02ID:9E+2eMtE0
かまってちゃんかよ
天気いいから散歩でもしてこいよ
88デフォルトの名無しさん (ワッチョイ bf8c-xsW+)
垢版 |
2021/09/20(月) 11:55:16.12ID:djFT0hLf0
コード醸せよ
2021/09/20(月) 12:03:32.94ID:DYg0tonqd
A・オリゼー
90デフォルトの名無しさん (ワッチョイ bf68-I2En)
垢版 |
2021/09/20(月) 12:27:59.43ID:lHEjG93V0
xxとyyどっちが早い、というのは本当に試した方が早い
バージョンアップで最適化されて、すげー早くなってる事がある
2021/09/20(月) 12:51:40.86ID:3QXihmxB0
>>87
別にかまってちゃんじゃなくて、回答に信頼性がないから自分で試したんだろう。誰かが信頼できそうな回答をくれたんだったら試さないと思うぞ。
2021/09/20(月) 13:12:45.31ID:26+LHXKYM
ちゃんと結果まで書き込んでるんだから
質問だけしていなくなるやつもいる中で、優秀だと思うよ
2021/09/20(月) 15:29:06.41ID:Ijs9yUmJM
>>86
まずはありがとうございました、だろ
うぜー帰れ
2021/09/20(月) 15:32:05.91ID:3QXihmxB0
>>93
お前何代表者みたいな顔して怒ってんだよ、とチャチャを入れてみる(笑)
95デフォルトの名無しさん (アウアウウー Sa5b-ONKb)
垢版 |
2021/09/20(月) 16:38:36.67ID:my+lQwjla
イヤ
マジで>>86はウザいわ
2度と来るな
96デフォルトの名無しさん (ワッチョイ bf8c-xsW+)
垢版 |
2021/09/20(月) 16:58:36.07ID:djFT0hLf0
スルー力がない奴もセットて消えろ
2021/09/20(月) 17:03:04.82ID:3QXihmxB0
>>96
お前もスルーしないと
2021/09/20(月) 17:07:29.03ID:FEM4xU2r0
子供か
2021/09/20(月) 17:16:52.36ID:3QXihmxB0
>>98
スルー力、言うのは易し、行うのは難し、を指摘しているだけ。

もう一ついいか?
人の振りして我が振り直せ(笑)
2021/09/20(月) 17:48:58.56ID:9E+2eMtE0
一番スルーしてない人が言うと説得力ある!
2021/09/20(月) 18:05:45.62ID:Mz1RekPdr
モジュールとボタンを別のブックにコピーしたくてできたと思ったんだけど
ボタンに登録されるマクロがコピー元のマクロになっちゃってとうすりゃええのか分からん
.OnAction=Thisbook&”マクロ名”とかじゃ動かないのね
2021/09/20(月) 18:30:41.29ID:aa1o0gq5a
それコピーじゃなくてインポートしろよ
2021/09/20(月) 18:40:40.67ID:FEM4xU2r0
>>99
寂しいのか?
104デフォルトの名無しさん (ワッチョイ bf8c-xsW+)
垢版 |
2021/09/20(月) 21:44:55.52ID:djFT0hLf0
ボタンをインポート?
これも楽な方法があったらいいのにね
105デフォルトの名無しさん (ワッチョイ bf68-I2En)
垢版 |
2021/09/20(月) 21:51:19.19ID:lHEjG93V0
シート上のフォームコントロールを消す時って
・右クリックで選択
・コンテキストメニューをESCで消す
・切り取り、もしくは「deleteキー」
で合ってますか?

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

どちらによるかでやり方が変わる
107デフォルトの名無しさん (ワッチョイ bf8c-xsW+)
垢版 |
2021/09/20(月) 21:58:44.81ID:djFT0hLf0
Ctrl+クリック
Delete
でいいんじゃない
108デフォルトの名無しさん (ワッチョイ bf68-I2En)
垢版 |
2021/09/20(月) 22:10:20.73ID:lHEjG93V0
>>107
短縮できました、ありがとうございました
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

ってやるの、普通?
2021/09/21(火) 18:19:02.19ID:Qqw1uu/Y0
>>106
標準モジュールのマクロですー…
2021/09/21(火) 19:19:53.65ID:Bwxe0pHra
>>110
シートに標準モジュールのやつを呼び出すSubを書いて、それをボタンから呼び出せばいい
2021/09/21(火) 20:47:40.27ID:bgKjXBpU0
>>109
まず変数のスコープ覚えようね
2021/09/21(火) 21:06:44.82ID:0m2xZsmF0
>>109
普通は grobal_a と global_a の二つを一つにまとめると思う
114デフォルトの名無しさん (ワッチョイ bf68-I2En)
垢版 |
2021/09/21(火) 21:13:59.43ID:pV6hI0Vx0
>>110
全シートを選択してカットペーストでいけるだろ、と思ったら無理だった

VBEをVBAで動かすしか無いと思う。
https://jizilog.com/vba-modadd
http://officetanaka.net/excel/vba/vbe/07.htm
115デフォルトの名無しさん (ワッチョイ bf68-I2En)
垢版 |
2021/09/21(火) 21:29:23.86ID:pV6hI0Vx0
>>109
vbaってグローバル変数の初期化できないのか・・・
見たことはない。変な気はする
とりあえずはシートに書くほうが楽だと思う
constでいいなら初期化が出来る。社名みたいにほぼ絶対変わらない物ならこれでもいいかも

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

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

あと、初期化用の関数はPublic指定にしておかないと別のモジュールから呼び出せないよ。ThisWorkbookから呼び出すんでしょ?
2021/09/22(水) 08:55:25.77ID:h9k7055fM
ありがとうございます
2021/09/22(水) 08:56:23.60ID:h9k7055fM
constやってみます
2021/09/22(水) 11:22:09.41ID:QukUYkwCa
普通じゃなかったのか…俺もそうしてた
>>116
勉強になります
120デフォルトの名無しさん (ワッチョイ f72f-fBlf)
垢版 |
2021/09/22(水) 15:13:16.34ID:XBxd6ZoY0
書籍「イヤンもう!最初からそう教えてくれればいいのに!ExcelVBAのプログラミングのツボとコツがゼッタイにわかる本」の評判はどうですか?買うか検討中なのですが。
2021/09/22(水) 19:17:45.16ID:igHuaWyKa
>>120
ゼッタイにわかる本系の口語調文章に抵抗がないラノベ好きには良いんじゃない?
2021/09/22(水) 19:18:09.88ID:igHuaWyKa
>>120
ゼッタイにわかる本系の口語調文章に抵抗がない人には良いんじゃない?
2021/09/22(水) 19:19:18.20ID:igHuaWyKa
なにこのエラー去勢された
2021/09/22(水) 19:35:51.24ID:wAf2i/6rH
>>120
人それぞれ印象が違うから、参考書は最初の2、3ページ立ち読みして自分で決めるのがいいよ
125デフォルトの名無しさん (ワッチョイ bf68-I2En)
垢版 |
2021/09/22(水) 20:05:10.79ID:anCt84pS0
イヤンもう
って言うから検索したら特にそんな単語ついてないじゃないですか
2021/09/22(水) 21:46:48.06ID:Th7N/2yOd
https://i.imgur.com/Izd2bnq.jpg
127デフォルトの名無しさん (ワッチョイ bf68-I2En)
垢版 |
2021/09/22(水) 22:05:18.59ID:anCt84pS0
若い子が水着姿で教えるVBAの本なら簡単に死ぬほど売れるのでは?と思った
2021/09/22(水) 22:14:11.23ID:ER/2UqvV0
そもそもVBA自体がオッサン臭い言語
2021/09/22(水) 22:16:41.63ID:cVN8rRFZM
そもそも5ch自体がオッサン臭い場所
2021/09/22(水) 22:21:20.29ID:RvuuvfBjM
そもそもオッサンしかいない
2021/09/22(水) 23:01:12.21ID:LAnicbtO0
VBAとか作業記録してそれループするなり可変したりするなりちょっと直せば誰でも作れるからな
2021/09/22(水) 23:14:36.78ID:jBUNeyMwa
「はたらくプログラミング 」
「高校生からはじめる プログラミング」
「メイクロックマン 史上最大のプログラミング」
「独学プログラマー Python言語の基本から仕事のやり方まで」
のようなアニメやゲームキャラやイケメンを
採用して若い子にアピールするとか
「乙女チック4Gamer」第267回:
「推しと学べるプログラミング」
初心者も学べるプログラミング学習ゲーム
とか

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

恋のプログラミング~ダメ男の見分け方~ DVD-BOX2
のようなDVDを付録に付けてみたりとか
とかとにかくVBAもなんとか頑張って欲しい
2021/09/22(水) 23:55:17.87ID:ToEmXEKY0
オレも1冊3000円くらいのVBAの本買ったわ
その本をキーボードの下奥に置くと角度が良い感じになるんだわ
手首が疲れないし、職場でもなんか「やってる」感がかもし出せるし、本当に買って良かったと思える1冊だったな
134デフォルトの名無しさん (アウアウウー Sa5b-hED7)
垢版 |
2021/09/23(木) 00:25:56.19ID:1QHTb9H7a
全国フェミニスト議員連盟が半泣き←いまここ
https://www.tokyo-np.co.jp/article/132305
2021/09/23(木) 00:27:06.21ID:4aFmMHLK0
>>132
ん。
昔、EXCELVBAゲーム大作戦とかいう本が出てたよ。まぁVBAも昔からあるからゲーム作るのも先駆者がいたんだね。

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

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

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

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

何かいい解決法があれば教えてください。
2021/09/23(木) 09:39:09.54ID:MTBJM7920
自己解決しました。

@プロパティウィンドウでプルダウンからフレームAを選択する。
ACtrl+[A]で全選択した後、Ctrl+[X]で切り取り状態にする。
BフレームBのエリア外にマウスカーソルを持っていき、Ctrl+[V]で貼り付ける。
140デフォルトの名無しさん (ワッチョイ bf68-I2En)
垢版 |
2021/09/23(木) 11:52:58.11ID:O9y54sVl0
おめ〜^^
2021/09/23(木) 13:11:17.06ID:cmFu96z6a
>>139
たった5分も考える事が出来んのか
2021/09/23(木) 13:48:48.21ID:tEWlRRfOM
せっかく解決策書いてくれてるのにイチャモンつけるバカって何を考えてるんだろ…
2021/09/23(木) 13:53:17.23ID:DsLS3pBM0
ただの寂しがり屋の暇つぶしとか
2021/09/23(木) 13:59:57.49ID:5gST2jZHM
黙って去るやつよりよっぽどいいんだが
2021/09/23(木) 14:03:41.04ID:F4JAOFkVr
配列からグラフを書いたときってデータ数の上限はありますか?
その場合どのように対処すれば良いですか?
2021/09/23(木) 14:08:33.29ID:KMctW7zL0
>>145
上限を気にするようなデータ数だったら
excelでは重くて動かないと思う
別の言語で書いた方がいい
2021/09/23(木) 14:45:47.29ID:gN04ENXIM
>>145
その場合はデータをコンパクトにまとめるしかなくね
2021/09/23(木) 14:47:47.80ID:dUOklB1+M
>>145
数千個程度は描けたような記憶がある
そもそもそのレベルだと個々の値は見えないから複数個まとめて平均取るとかしてデータ量を減らせばいいかと
149デフォルトの名無しさん (ワッチョイ bf8c-xsW+)
垢版 |
2021/09/23(木) 15:12:01.32ID:AtVLca4O0
系列数に上限がいかにもありそう 255とか
150デフォルトの名無しさん (ワッチョイ bf8c-xsW+)
垢版 |
2021/09/23(木) 15:22:04.38ID:AtVLca4O0
>>145
上限なしだって
https://support.microsoft.com/ja-jp/office/excel-%E3%81%AE%E4%BB%95%E6%A7%98%E3%81%A8%E5%88%B6%E9%99%90-1672b34d-7043-467e-8e27-269d656771c3
これスレのテンプレに入れといてほしい
2021/09/23(木) 18:38:01.80ID:rxtBh7Jj0
>>145
セルに適当なデータいれてグラフ作ったら 9万9千9百+α までしか表示されなかった
メモリの問題かもしれん
2021/09/23(木) 18:52:18.65ID:c0lh6Lzfr
ごめんなさい
セルからではなく配列から直接グラフを読み込むときの話です。
自分の場合配列から散布図書いてて
データ数が15000?あたりから表示されなくなったので
2021/09/23(木) 20:46:47.80ID:rxtBh7Jj0
だからメモリ少ないんじゃね
2021/09/24(金) 16:28:38.47ID:GLO6/yx90
VBAで、リボンを常に表示させるてことできるんですか?
ググると
Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"", True)"
ていうのが出てくるんですが、
”タブとコマンドの表示”ていう状態にしたい。
2021/09/24(金) 18:53:45.39ID:towOKsyE0
If Application.CommandBars.GetPressedMso("MinimizeRibbon") = True Then
Application.CommandBars.ExecuteMso "MinimizeRibbon"
End If
2021/09/25(土) 02:37:13.36ID:p3qnNTxE0
>>155
おおサンクスww
できた。

なんでリボンの表示・非表示の記事書いてるやつはここまで書かないのかね。
2021/09/25(土) 06:01:58.81ID:A2HuAdJq0
なんでだと思う?
158デフォルトの名無しさん (ワッチョイ 1e68-wYsx)
垢版 |
2021/09/25(土) 07:24:00.70ID:i7f0lbxJ0
しっかりと自分で考える事が大事!向上心をもって勉強しよう!
2021/09/25(土) 07:50:31.86ID:xUBmE3KO0
ひろゆきのクラスモジュールの説明は的確で分かりやすかった
2021/09/25(土) 07:51:02.02ID:xUBmE3KO0
クラスモジュールというよりはオブジェクト指向か
2021/09/25(土) 13:59:25.45ID:QZokVoY5p
このスレにはクラスとかオブジェクト指向とかいうと、ファビョって「マウント取りに来たー!!」とか騒ぐじじいがいるから気をつけた方がいいぞ
2021/09/25(土) 14:23:54.16ID:ADwaIx4kM
5chはじじいの巣窟ですよ。
子供は他所で遊んだ方が良いですよ。
163デフォルトの名無しさん (アウアウキー Saef-nXzz)
垢版 |
2021/09/25(土) 15:09:26.96ID:kjOWSdg4a
>>161
聞く方もじじいだし
2021/09/25(土) 22:54:03.42ID:/8ShLWKPp
エクセル詳しい方にご質問。

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

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

見えない仕組みとか、基本的な仕様を見逃してるんかなぁ…
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
注: ユーザーは、この設定に関係なく、保護されたワークシートでオートフィルターを適用または削除できません。
2021/09/26(日) 00:17:38.53ID:BPwZjS350
とあるフォルダへのショートカットを作成する方法を調べたところ、
コーディング前に、
>参照設定は、VBA画面→ツールメニュー→参照設定で「Windows Script Host Object Model」を選択します。
>これでWshShellクラスとWshShortcutクラスを利用できるようになります。
という記述がありました。

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

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

しかし、シートの保護とAutoFilterを両立できないとは、痒いところに手が届かない仕様ですな。
2021/09/26(日) 01:37:23.16ID:O844yIU50
>>167
オートフィルターON/OFFと同時にシートの保護/解除も書いてしまえばいいんでないの?
2021/09/26(日) 01:39:32.52ID:BPwZjS350
>>166
自己解決しました。

参照設定を変更しなくてもショートカットの作成は可能でした。
そちらの方法にします。
https://excel-ubara.com/excelvba4/EXCEL293.html
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については、相手にも参照設定をしてもらわないとショートカットの作成は行えない、ということだと思います。
2021/09/26(日) 01:51:41.55ID:vU9Y5LAHp
>>168
確かに、仰る通りですね。
保護は事前に設定しておくものと勝手に思い込んでいました。

一番良い形で解決できそうです。ありがとうございます。
2021/09/26(日) 15:56:59.18ID:ynzNBMLj0
>>170
参照設定した内容はそのエクセルファイルに保存されてる
エクセルファイルを渡した先でその参照設定がちゃんと動くなら動く
2021/09/26(日) 18:28:19.91ID:6z2Q/VJPM
二次元配列の第三カラムが重複していたらレコードまるごと排除して、かつ排除された分のレコードを別シートに転記することってできます?

連想配列に入れておけば重複してたらわかるようになるけど、そういう方法ってまとも?
2021/09/26(日) 18:29:58.19ID:Fsa0c3oL0
第三限定なの?
2021/09/26(日) 19:28:17.19ID:HYuUGx6O0
できるかどうかではなく、そういう処理を作りたいんじゃないの?
2021/09/26(日) 21:42:42.58ID:hcQxkCQHM
配列とレコードとシートの区別ない人だね
2021/09/26(日) 23:35:14.87ID:ISHRJ32V0
そういう方法で重複チェックをしたことはあるけど
それがまともかと聞かれるとわからんなぁ
2021/09/27(月) 17:52:26.41ID:wG/2iXK70
配列は要素数が増減するものには向いてない
が、まあいろいろ頑張ればできる

連想配列でわかるのは、入れようとしたときに重複するかどうかで、そもそも重複したものは入っていないだろ
179デフォルトの名無しさん (ワッチョイ 1e68-wYsx)
垢版 |
2021/09/27(月) 21:07:52.71ID:9JOCRyj50
>配列は要素数が増減するものには向いてない
「vbaの」配列な
他の言語にはpushとか色々便利なものがあるんやで
2021/09/27(月) 21:09:45.06ID:1fIlBTl00
Excelにはセルっていう使いやすい2次元配列があるからな
速度はご愛嬌
181デフォルトの名無しさん (ワッチョイ 1e68-wYsx)
垢版 |
2021/09/27(月) 23:17:35.36ID:9JOCRyj50
シート入れれば三次元やぞ
2021/09/28(火) 06:06:35.41ID:NhFpYAOsM
>>179
> 他の言語にはpushとか色々便利なものがあるんやで
スクリプト言語とかだろそれ
言語自体の機能として配列のサイズを変えられる言語はそんなに多くないよ
そもそもVBAはその多くない言語に含まれるし
2021/09/28(火) 11:35:58.86ID:mkxQja700
無いものねだりしてもしょうがない
そもそも他言語やっててVBAやった場合
ない機能をどうやって実装するか考えるのが
醍醐味なんだから
184デフォルトの名無しさん (ワッチョイ 92ad-mV7G)
垢版 |
2021/09/28(火) 12:14:47.38ID:fFhZgLlN0
>>182
実はVBAは「配列」のサイズを変えれる数少ない言語
まあ多分全コピー発生してるんだろうけど
コレクション系が弱いからそれぐらいできんとかなりツラい
今なら.NETの使うとか出来るけど
2021/09/28(火) 13:45:05.92ID:T/P4fEdFM
>>184
> コレクション系が弱いからそれぐらいできんとかなりツラい
どこが弱いの?
2021/09/28(火) 15:11:07.44ID:8+n9QyO8M
今の時代、メモリなんてたくさん確保しておけばよくね
187デフォルトの名無しさん (ワッチョイ 6f8e-emG0)
垢版 |
2021/09/28(火) 15:43:04.78ID:ZLV/p08A0
「たくさん」と言ったってワークステーションやサーバ系のハードウェアでない限りせいぜい64GBか128GBが上限では?
2021/09/28(火) 15:46:57.39ID:9IVurO/LM
お、おう
189デフォルトの名無しさん (ワッチョイ 4be5-XWMK)
垢版 |
2021/09/28(火) 16:43:48.67ID:yyyanN8B0
64KBまでだよ
2021/09/28(火) 16:48:32.26ID:vws8rDV40
VBA(Excel)にそんなメモリ使わせたらヒヤヒヤしちゃう
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に変更するにはどうするのが良いでしょうか?
2021/09/28(火) 18:37:14.39ID:nfdxFkKa0
リアルタイムにやる必要が無いならバイナリでファイルに書いて
Singleで読むとか出来そうな気がする。
同じ考え方でADODB.stremも使えそう。
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
194デフォルトの名無しさん (ワッチョイ 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

こんな感じに。
オーバーフローして表示しきれなくなった分は知らんけど。
195デフォルトの名無しさん (ワッチョイ 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は論理演算子ではなくてビット演算子。
2021/09/29(水) 02:45:23.84ID:DNRsGaHg0
>>191
SingleもLongも32ビット長なんだが、Singleの内部形式が分割されて二つのLongに16ビットずつ格納されているのか?
なんでそんなことになってるんだよ。Integer二つでいいじゃないか

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

Singleの内部形式はIEEE 754のはずだから、自分でビット演算してもできるだろうけど
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
2021/09/29(水) 03:32:54.18ID:hT//j47fd
VBAには共用体もポインタもないから、
LSetでメモリの内容をコピー
バイナリファイル経由
IEEEの内部フォーマットに合わせてゴリゴリ計算
ぐらいしか思い付かん

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

C#とか使えばもっと簡単にできるんで、そもそもこの作業はVBAに向いてない
2021/09/29(水) 04:17:58.49ID:DNRsGaHg0
>>198
それ符号ビットの問題があるぞ
VBAには論理シフトとかないからな

バイナリファイルにするにしても、Longの不要な16ビット捨てる方法考えんといかん
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)
2021/09/29(水) 05:43:02.15ID:ia9ebpqvd
訂正
MSB = ((Long0 And &H8000) <> 0) And &H80000000
2021/09/29(水) 08:25:13.60ID:slA14A+y0
>>201
いや、Longの中に入っている時点でマイナスなら* -1してやればいいだけだけど、だったらもっと範囲の広い型で後ろ2バイト以外クリアする方が分岐もなくスッキリするだろう
2021/09/29(水) 08:41:09.05ID:+gGxbszWd
>>202
元データの上位2バイトが00で埋まってた場合、論理シフトで符号が変わる場合があるでしょ
VBAには論理シフトがないから、何か別の方法で再現する必要があると思うんだけど
具体的に、動くコード書いてみて
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
2021/09/29(水) 09:40:16.79ID:f5tfMzLod
>>204
それなら最初にLongをByteにLsetすれば、マスクやシフトしなくても途中のバイトがそのまま取り出せる
コードの行数は増えるけど演算量はもっと減らせる
2021/09/29(水) 12:56:20.18ID:slA14A+y0
>>203
ちょっと何を言ってるか分かりませんね。
まずシフトの話はどこから出てきたの?
Long型ならマイナスであれば常にトップビットは
立っているよね?
だからプラスに変換するってことだけど?
トップビットが立っていなければプラスなんで変換する必要はない。
もちろん、最初の設定値のLong型の下位2バイトでマイナスを表現するならそれぞれ*-1してやらなきゃいけないけど>>191を見た限りではそのような扱いでもないしね。

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

例えば、1バイトの変数で言えば、-1はFFhだよね。
これのトップビットを倒すと、7Fhになる。
つまり、1にはならずに127になるよね。
2021/09/29(水) 19:09:56.88ID:UXZ9zF/70
VBAのウインドウの固定で行を選択するとA列に移動してしまうのはどうにかならない?
手動だとそのまま列でウインドウの固定になるから違いがよくわからん
2021/09/29(水) 21:29:48.02ID:7Q67NENAd
>>206
元の質問と、そこに付いてるレスをよく読んで
2021/09/29(水) 22:06:13.36ID:bAaW5g7mM
>>206
ゴタクはいいから
> 具体的に、動くコード書いてみて
って言われてるぞ
2021/09/29(水) 22:10:21.46ID:slA14A+y0
>>209
具体的なコードは昨日既に>>195で書いているな。
2021/09/29(水) 22:32:44.25ID:helTTC1Td
図解するとこういうことじゃないの?俺の理解が間違ってる?
https://i.imgur.com/z48adB1.jpg
212デフォルトの名無しさん (ワッチョイ 124f-E55q)
垢版 |
2021/09/29(水) 22:47:00.69ID:slA14A+y0
>>211
うん。それであってるよ。
ただ、.Netみたいにアンサインな型の変数が無いから
それをどうしようか、という話。
Longで普通に計算すると上位2バイトに65535(&HFFFF)辺りが入れば
例えば&HFFFF00000が入ったとして、4294901760が欲しいのに
普通にLong型だと-65536が取れちゃったりするよね。
2021/09/29(水) 23:33:48.06ID:slA14A+y0
あ、でも*-1する方法じゃダメか。
これはあくまでマイナスをプラスにする方法であって、トップビットが立っていてもプラスとみなす方法じゃないからね。
そう考えるとやっぱりもう少し幅の広い変数持っといて計算する方法が楽かな。

だからみんなByte型とか使ってたのかー。
なんか勉強になったわ。
2021/09/29(水) 23:39:44.93ID:+/PybBD+d
一つの例として、
Long[0]=&h00000000
Long[1]=&h00003E20
の時、得られるSingle値は0.15625になる
正しく計算できてるかどうか試してみればいい

>>191
Hexの戻り値は4桁とは限らないから、それでは正しく結合できないよ
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
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

動いた。改行多すぎって言われたので詰めて書いてる。
2021/09/30(木) 00:49:27.70ID:pCEIeulu0
>>214
それ、Longの上位下位どっち側にデータ入れるかによって
00 00 3E 20 で、数値表現としては &h3E200000 かもしれん
>>197はその前提で作ってるし>>211の図もそうだな

と思ったけど、HEX表現でそのまま連結してOKとか思ってるのか
3E 20 00 00 って格納してるのが正解なのか
エンディアンの呪いやっかいだなぁ
2021/09/30(木) 05:21:02.09ID:0qBy1lQqM
>>210
それツッコミないのはあまりにもレベル低いからだぞ…
2021/09/30(木) 06:14:58.44ID:gM2Bcn3cd
>>217
質問者が単純にHex関数の連結だけでOKだったと書いてるから、それぞれ下位16bitを使ってて、Long[0]が下位、Long[1]が上位側と読み取れる
まあ逆だったとしても簡単に修正できるし
220デフォルトの名無しさん (アウアウキー Saef-nXzz)
垢版 |
2021/09/30(木) 08:01:56.59ID:R3l1DBbza
質問する前に良く考えれば自力でできたんじゃね
2021/09/30(木) 09:52:07.40ID:Vb95uiyM0
VBAで標準モジュールを削除するコードを書いてるんだけど、消えない場合がなくね?
removeしてもそれがすぐに反映されない。
commitするようなコマンドてある?
222デフォルトの名無しさん (ラクッペペ MMde-XWMK)
垢版 |
2021/09/30(木) 10:02:50.98ID:R1d8oRoFM
ないならいいじゃん
2021/09/30(木) 10:06:49.68ID:XH3u7BFNM
「場合がなくね?」を「場合がない」と読むのは流石に揚げ足取りが過ぎる
2021/09/30(木) 10:16:54.23ID:eFhgF698M
なくね?
→なくない?
 ないよね?

言語仕様による違いかな
2021/09/30(木) 10:20:26.49ID:+bzcSAlDd
文脈から言い間違いだと気づけないのはアスペだそうですよ
2021/09/30(木) 10:58:49.96ID:SEX1vFKW0
> commitするようなコマンドてある?
 →commitが欲しい
  →なくね?は間違い

脳仕様による違いかな
2021/09/30(木) 12:35:11.89ID:Vb95uiyM0
調べるとこういうことが起こってるみたいだな。
https://try2explore.com/questions/jp/11366816

VBComponents.Remove呼び出しは、VBAの実行が停止した場合にのみ実際に有効になる場合があります。
つまり、すべてのステートメントが終了するまで、またはコードがブレークポイントに達してデバッグを停止するまで、
削除操作は有効になりません。
これは、新しいモジュールをインポートするか、既存のモジュールのコードを新しいモジュールに置き換えるための次のコードが原因で問題になります。
2021/09/30(木) 13:00:34.16ID:aMauK9B30
もう起こったぞ
2021/09/30(木) 19:03:25.50ID:gc4CAj+A0
クリリンのことかー
230デフォルトの名無しさん (ワッチョイ 2701-CiRx)
垢版 |
2021/09/30(木) 19:31:20.50ID:4/dpkDC70
>>220
多分ビット演算を知らないんだと思う
いずれにしてもバイナリごにょごにょはVBAには適さないとレス見てて改めて思った
2021/09/30(木) 20:06:00.47ID:aMauK9B30
バイナリならByte型でやればいいのにね
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)」の部分がずっとループして止まらなくなった。

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

i=3
みたいにiが永久に10を超えない動作が入るとそうなる
2021/09/30(木) 23:04:37.72ID:Vp0fi7DV0
普通に動いていると思っていただけで元々普通に動いてなかったとかはある
こんな感じのって言ってるから、そのソースそのまま受け取るわけには
いかんのだろうなって思った
2021/09/30(木) 23:16:32.92ID:VHGvetdVa
初心者の頃は手動でセル入力してた方が早く終わってしまうのが、もどかしくもあるけど
それでもvbaは覚えるべきだと思っていろいろ頑張ってます
237デフォルトの名無しさん (ワッチョイ 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

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

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

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

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

イベント機能とか状態保存を有効に使いたい、コレクションを自作したい、
みたいな特別な理由がない限り使わない方がいいんじゃないかなぁと思ってる
2021/10/01(金) 20:46:27.80ID:g1N/sLwpM
継承までは望まないとしてもせめてInitializeに引数を持てるようにして欲しかった
2021/10/01(金) 20:53:23.76ID:4jCtmjal0
>>248
Initializeはコンストラクタじゃなくてイベントだから、
仮に引数があってもオブジェクトモジュール内じゃないと使えない上に、
インスタンスごとにイベントハンドラ用のモジュールレベル変数が必要になって面倒だと思う
2021/10/01(金) 21:49:30.27ID:j+Pc2S4XM
イベントに引数渡せる言語はいくらでもあるのに何を言ってるんだ?w
2021/10/01(金) 22:01:08.86ID:4jCtmjal0
>>250
どう読んだらそういうレスになるの?
読解力のないバカはこれだから困る
2021/10/01(金) 22:07:37.29ID:CXdVtwXkM
>>251
はいはい、説明できないバカ乙
そもそもコンストラクタにすればいいだけの話だし
2021/10/01(金) 22:11:26.60ID:CmFZe7Ct0
質問者の環境や能力を無視すんなよ
2021/10/01(金) 22:24:35.99ID:4jCtmjal0
>>252
何をどう解釈したのか言ってくれれば対応できるけど、最早返答が意味不明過ぎるんだわ
何に対して「イベントに引数渡せる言語はいくらでもあるのに何を言ってるんだ?w」と疑問が沸いたのか説明して?
2021/10/01(金) 22:34:31.13ID:4jCtmjal0
>>252
あと、VBAのクラスに「引数が付いたコンストラクタが欲しいな」っていう希望から
「Initializeに引数を持てるようにして欲しかった」っていう要望が出たのは明白だろう

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

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

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

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

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

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

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

俺はVBAのクラスは自作イベント使いたいときに使うものと思ってる
2021/10/02(土) 06:05:15.61ID:g1EUYVpxM
>>254-255
イベントだから何?って話
VBAでも引数を持つイベントはあるし、できない理由を必死に探してるだけにしか見えない
そもそもイベントとコンストラクタなんてある意味呼び方の問題だし
2021/10/02(土) 06:08:02.24ID:g1EUYVpxM
>>256
> あ?コンストラクタに引数?
> そんなのは初期化用のメソッド作って呼びゃいいだろうと俺は思うけどね。
> まあでもそういうのに頭使って組むからVBAは面白いんだと思うよ。
そういうのは頭使うとは言わない
単に面倒(かつバグの元)なだけ
無い物ねだりすんなと言うならわかるけど
260デフォルトの名無しさん (ワッチョイ b3e6-SE+q)
垢版 |
2021/10/02(土) 07:21:09.62ID:f83gGEH/0
VB7を待て!
2021/10/02(土) 07:44:35.99ID:PmOXqFk20
>>259
言ってる意味が分からない。
生成した後初期化用のメソッド呼ぶだけだろ?
なんでそんなのが面倒でバグの元になるんだ?
お前はそんな程度でバグを生むソースを書くのか?
262デフォルトの名無しさん (ワッチョイ 6f68-UmxQ)
垢版 |
2021/10/02(土) 07:49:32.43ID:i6pQYLUQ0
それ言い出すとどんな言語でも「だけ」になるぞ
2021/10/02(土) 07:52:52.17ID:PmOXqFk20
それにポリモーフィズムを理解している奴ならむしろバグやUTケースを減らせるコードが書ける。
でなければObject指向なんてここまで浸透しなかっただろうよ。
2021/10/02(土) 07:53:44.67ID:PmOXqFk20
>>262
例えば?
2021/10/02(土) 08:50:27.63ID:7sXji/t3M
むしろ>>263の方に例えば?って言いたいわw
2021/10/02(土) 09:59:20.90ID:PmOXqFk20
>>265
学生なのか?
社会人であるなら上司から
質問を質問で返すようなマネはするなと
教わらなかったのか?

まぁいい
答えてくれれば答えよう
それが順序というものだ
2021/10/02(土) 10:26:50.08ID:SSNRs28sM
>>266
バカなの?
別人だし>>263は質問じゃねーし
まあまともな答えは期待してないから答えなくてもいいぞw
2021/10/02(土) 10:45:25.61ID:l9bGJwl90
>>267
お前はまた勉強する機会を損失した
ただそれだけのこと
2021/10/02(土) 11:55:15.97ID:SSNRs28sM
勉強?
からかわれてることぐらいは理解した方がいいぞw
2021/10/02(土) 11:56:22.57ID:h3OHY9Ln0
まあまあ、通りがかりの者だけど、お前ら仲良くやれや
2021/10/02(土) 12:17:57.73ID:4Bm9Y75Jp
まったく最近のじじいは
マウントどうのとかほざくくせに
負けず嫌いで困る
2021/10/02(土) 12:26:19.80ID:s0PycLWJM
5chはじじいの巣窟ですよ。
子供は他所で遊んだ方が良いですよ。
273デフォルトの名無しさん (ワッチョイ 6f68-UmxQ)
垢版 |
2021/10/02(土) 17:44:59.50ID:i6pQYLUQ0
>>264
クラスにコンストラクタがない
→newの後にメソッドなりで中身かえればいい「だけ」

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

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


ただ、俺はやだなぁ
ついでに言うとarrayにpushはマジで欲しい
2021/10/02(土) 17:50:29.29ID:ffSwt3TR0
>>273
したくないのは自由だが、いまさらVBAが更新されることはないから、諦めて他の言語に行ってくれ
2021/10/02(土) 18:23:04.84ID:xagjL2JO0
>>263
ちゃんとしたオブジェクト指向言語使えば減らせるってならともかく
VBAでオブジェクト指向でやってUTケース減らせると思えんが

ちょっとVBA関係ない話になるが
お前の思うポリモーフィズムと引数付きコンストラクタの使いどころ教えてくれ
2021/10/02(土) 18:24:23.99ID:yfSowQXWM
>>274
> いまさらVBAが更新されることはないから
みんなそんなことはわかってるけどいきなりどうしたw
2021/10/02(土) 18:35:12.83ID:ffSwt3TR0
>>276
無駄な議論する意味なしでしょ
VBAの質問スレだし
2021/10/02(土) 19:02:41.91ID:/B20gKTEM
ああ確かにそうだな
そりゃすまん
2021/10/02(土) 21:28:02.67ID:PmOXqFk20
>>275
そうだな、ちょっとその前に
例えば一つの例としてゲームを作ったとしよう。
それは簡単なシューティングゲームだったとして、
キャラクターの中に自機、弾、敵、ヒットマークがあったとする。
キャラクター数の上限は考えないものとし、敵は幾つか種類がいるものとして、ひとつは地形判定を行う、一つは弾を打つ、等の違いがあった場合、
君ならどう作るか聞いてもいいかな?

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

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

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

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

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

もっとも、都度落ちる箇所が違う場合もあるかもだろうけど、そうなったらそうなったでそれから当たりをつけて調べればいいのであって、まず落ちている箇所が特定出来れば原因もある程度絞れるよね。
2021/10/04(月) 20:43:05.82ID:TWw1hYLnM
>>296
たいていはユーザー定義型で十分
2021/10/04(月) 22:16:21.62ID:YLhov1R00
For i = 1 to 10
Call Sleep(200)
DoEvents
Next i
310デフォルトの名無しさん (ワッチョイ e38e-6V0L)
垢版 |
2021/10/05(火) 00:51:53.00ID:AqVIusQn0
>>296
お前の知能が足りなくてアウアウしてるだけだろ
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
2021/10/05(火) 15:45:39.37ID:dJ3N05Swa
補足ながら>>311はMPもマルチページとして宣言するか該当箇所をMP.Pages("D3").Name = "X3"に書き換えれば期待通り動くんですよね
どういう仕組みなのか
2021/10/05(火) 15:56:25.07ID:hS5WuwV9r
worksheetfunctionの引数に配列入れるときって数に上限があるな
警告も出さないしほんまクソ
2021/10/05(火) 15:56:31.46ID:hS5WuwV9r
worksheetfunctionの引数に配列入れるときって数に上限があるな
警告も出さないしほんまクソ
2021/10/05(火) 16:15:51.73ID:2oqKIsmm0
>>312
いや
普通に通るけど。ちな2016。
2021/10/05(火) 16:19:44.73ID:2oqKIsmm0
あ、でもこっちはOption Explicit 付けてたから
MPはキチンと型宣言してたな。
でもそこはあまり関係ないよね?
317デフォルトの名無しさん (アウアウキー Sa87-Kp1k)
垢版 |
2021/10/05(火) 16:21:29.24ID:dJ3N05Swa
>>316
や、たぶん関係するっぽいですかね?
こちらオプション無し、宣言は無しまたはas objectだとダメでas multipageだと通った
2021/10/05(火) 16:29:34.84ID:2oqKIsmm0
>>317
ふーん
不思議だねぇ
ちなみに宣言しないで走らせたときの
MPの内部型ってどうなってる?
ごめん、もう走ったからこっちは
EXCELのブック消しちゃったんだ。
2021/10/05(火) 16:32:02.05ID:dJ3N05Swa
variant/object/multipageでした
2021/10/05(火) 16:36:45.31ID:2oqKIsmm0
>>319
やっぱり不思議だねぇ
その辺の内情は分からないな
一応片付いたことになるのかも知れないけど
誰かその辺知ってたらレスが付くんじゃないかな
2021/10/05(火) 16:39:04.47ID:dJ3N05Swa
そうですね、とりあえず急ぎとか困りではないので一旦これで…
ご回答ありがとうございました
2021/10/05(火) 18:26:27.16ID:jAVyPZWcM
型推論するのに失敗してるんじゃね
2021/10/05(火) 21:37:47.06ID:LdUtAYwX0
Pagesの引数に変数渡すと数字として解釈しようとしてるっぽいな
buf = "2" とかにするとIndex=2のページを参照してるようだ
文字列リテラルならちゃんと名称として解釈してるっぽい
ちな365の64ビット

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

毎回モジュール見直すとvisible farceになってて要するに抜き出したいもの以外を表示しないようにしてる構文て事だよね?
こうなると仮に次回このマクロを使う時にvisible farceになってない値が新しく出てくるとそれも表示されちゃうって事だよね?
じゃなくていくら値が増えても決められた値だけを抜き出すように作りたいんだ
どなたか教えて下さい
2021/10/07(木) 20:11:24.24ID:70iiidwq0
>>324
記録してみてどうなってるか見てみれば分かるじゃん
2021/10/07(木) 21:05:39.19ID:D5dO/oMJ0
>>324
Falseね
ピボット周りのフィルタはFor EachでTrueFalseを一つ一つやっていかないと無理な仕様
遅いしわかりにくいけど割り切って
2021/10/07(木) 21:29:48.70ID:AykPZAFh0
ActiveSheet.PivotTables("ぴぼっとてーぶる").PivotFields("ふぃーるど").ClearAllFilters
ActiveSheet.PivotTables("ぴぼっとてーぶる").PivotFields("ふぃーるど").PivotFilters.Add Type:=xlCaptionEquals, Value1:="表示したいもの"
2021/10/07(木) 23:55:42.12ID:P9pCLiyt0
VBAで最適化したら仕事増やされた話ってよく聞くけど
そいつが辞めたらそいつに回されてた膨大な仕事はどうなるん
329デフォルトの名無しさん (アウアウキー Sacb-h0Ad)
垢版 |
2021/10/08(金) 00:17:45.54ID:sJT5Ti/qa
うちの職場は適当にvbaでつくったやつをちゃんとしたアプリに置き換えてるよ
2021/10/08(金) 00:31:33.80ID:GXvDbP/z0
アプリだろうがvbaだろうが作った人間がやめたらメンテできなくて終わるんじゃないの
開発者が大勢いるようなレアな職場ならともかく
vba使ってるところなんてたいてい事務で
エクセル職人が少数いるだけだろ
2021/10/08(金) 00:37:30.31ID:d3eTt0zpM
実際にはそういうときには業務そのものが消滅するケースも多いよ
そもそもVBAで簡単に自動化できるような業務はもともと無意味であるものが多いからな
2021/10/08(金) 02:32:08.41ID:KEaimES90
人がやめた後に職場がどうなるかはその職場の責任者が決めるんじゃね
下っ端が気にすることじゃない
2021/10/08(金) 04:11:36.40ID:vcejz6/Ud
市販アプリでも、天才的な開発者が辞めて、会社もろともアプリもダメになって終わったパターンをいくつも見てきた
2021/10/08(金) 07:11:46.26ID:GXvDbP/z0
>>331
>>333
なるほどねありがとう
335デフォルトの名無しさん (アウアウウー Sa2f-YkK2)
垢版 |
2021/10/08(金) 08:09:49.53ID:Am1Ugnvua
>>326
>>327
丁寧にありがとう
色々試してみます
336デフォルトの名無しさん (ワッチョイ 8a05-GJBa)
垢版 |
2021/10/08(金) 09:40:27.58ID:JQJjKarL0
CPU使用率が大きかったのでダメもとで開いて修復を実行したら
かなり軽くなるのな、知らんかった
これ定期的にやったほうがいいのか?
VBAのコードを一旦退避させるのが面倒だが...
2021/10/08(金) 17:00:42.44ID:EVmjGNOc0
>>336
詳しく
2021/10/08(金) 22:11:41.59ID:x7uCSItJ0
属人的にならない仕組みで効率化できればいいんだが、頭の中が古き良きな方々が幅を利かせる日本ではなかなか難しい
2021/10/09(土) 01:49:50.17ID:98oBjVW70
自分が初めてVBAを使って解決した時点で、他にVBAを使う人がいないんだから属人化しないわけがないと思うけどな
しかもVBAってプログラミング言語の中では非常に初心者向けなわけで、
誰もVBAで組めない=プログラミングに全員疎いのはほぼ決定なんだから尚更さ

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

相当な根気が必要だと思うよ
2021/10/09(土) 02:16:01.12ID:2HXwYm4Z0
そもそも人に仕事が割り振られた段階で属人化されてるわけで
たんに次の人が困って終わりだよ
2021/10/09(土) 02:30:43.66ID:98oBjVW70
確かに。
レス漁ってみたが、
ここでいう「属人化で困る」は「他の人にはできないVBAというテクニックを持つオレスゲー」を単にオブラートに包んだだけっぽい感じがするな
2021/10/09(土) 02:49:32.47ID:0Qsp0NFP0
マクロの効率化ガン無視で社員の手が開いた分だけ仕事を割り振る上司がいるらしいけど
その時点である意味属人化してるよね
その仕事引き継ぐやつ
まずさばき切れないだろ
2021/10/09(土) 04:49:21.33ID:UCXjyRPA0
うちの職場ではほとんどの人がマクロできるけど、新人に自信持たせるためにわざわざ気を使って
「君マクロできるなんて凄いね〜」っておだててるのに同調するのが正直めんどくさい
2021/10/09(土) 04:50:24.64ID:0Qsp0NFP0
そういうとこは給料高そうで羨ましい
2021/10/09(土) 05:01:41.26ID:UCXjyRPA0
>>344
給料は個人の能力に比例します
2021/10/09(土) 08:10:48.77ID:KDe6uexsd
新人の育成は面倒だけど将来的に必要なことだからなあ
褒めた方が上達が早いってのも科学的に証明されつつあるし、そういうもんだからあきらめろ
2021/10/09(土) 08:19:40.75ID:0Qsp0NFP0
全員VBAできるとか絶対給料高いとこだろ
うちのところなんて一人しかいないよ
しかも残りは関数すらまともにあつない
2021/10/09(土) 08:21:07.29ID:0Qsp0NFP0
おかげで効率がすげー悪い
基本は専用ソフト扱うからエクセルは必須ではないとはいえ
それでもエクセルやVBAやれるのとやれないのとでは効率が雲泥の差
2021/10/09(土) 08:31:06.39ID:HlWFX8NcM
選民思想ここに極まれり
2021/10/09(土) 08:33:14.89ID:qDyUb0P50
研修とか外部の自宅学習プログラムでもやったら?
費用は会社持ち、報奨金も少しは付けて
2021/10/09(土) 08:37:41.66ID:0Qsp0NFP0
そんな金あったら給料上げてレベルの高い人材雇うか
もうちょっとマシな専用ソフト使ってる
金をケチったせいでオンボロ専用ソフト使わせれて
専用ソフトじゃフォローしきれないのでエクセル活用しないと行けない羽目になってる
2021/10/09(土) 08:57:09.18ID:g5OHjBNSd
会社は社員に楽させたいと思ってるわけじゃない、という大前提
人材なんて時間いっぱい、めいっぱい働かせてナンボ
安いアプリを買って、あとは社員にやらせて、それで回ってるなら何も問題ないんだよ
2021/10/09(土) 09:27:27.16ID:0Qsp0NFP0
高い金出して高価な専用ソフト使うくらいなら
多少残業代だしてもいいからボロソフト使ったほうが安上がりだからな
2021/10/09(土) 09:42:15.79ID:58+qPlR+0
エクセルはマス目状に文章を入力できるソフトぐらいにしか思ってない人もいるしなあ
2021/10/09(土) 15:35:55.10ID:8vFa8kgUd
>>354
ウチの会社の事務方ほとんどそれだわ
セルの結合しまくって数値手入力とか当たり前
2021/10/09(土) 20:10:49.92ID:J89rndhPa
セル結合せずにせめて広げろや、とは思う
2021/10/09(土) 20:26:49.65ID:XLSjDb/pM
セル結合とvlookupをディスってようやくエクセル使いとして一人前
2021/10/09(土) 20:30:33.16ID:0Qsp0NFP0
べつにvlookupは悪くないだろ俺は使いたくないけど
2021/10/09(土) 20:58:23.98ID:ZXG2HktNM
>俺は使いたくないけど
さりげないアピール
2021/10/09(土) 20:59:19.46ID:ZXG2HktNM
>俺は使いたくないけど
さりげなさを装ったアピール
2021/10/09(土) 21:05:39.47ID:LYlfiTybM
VLOOKUPディスってるのは情弱だろ
2016からめっちゃ高速化されてるから数万行ぐらいなら普通に使える
2021/10/09(土) 21:11:18.66ID:0Qsp0NFP0
高速化とかどうでも良い
左端しかデータが使えないのが不便
無駄な検索用データが全部左端に固まる
2021/10/10(日) 06:43:03.77ID:LB6rENWtp
個人的に使いたい使いたくないは仕方がない
適材適所で最適解を出す手段に自ら縛りを掛けているだけだから
それで他の人に迷惑掛けている訳でなければとやかく言う筋合いでも無いしな
2021/10/10(日) 08:15:02.57ID:AQQzB40DM
>>362
XLOOKUP使え
うちの環境だとまだ使えないけど... orz
2021/10/10(日) 10:34:27.64ID:iKRuQHQv0
index matchでええやん
2021/10/10(日) 15:09:30.75ID:2USb7I2AM
MATCHはいちいちIFERROR組み込まなきゃいけないから式が冗長になりがちであんまり好きくない
2021/10/10(日) 15:39:33.06ID:wqZqaK12d
そもそもスピードは求めてない
元データを1日に何回もアップデートするわけじゃないし
2021/10/10(日) 15:46:10.06ID:iKRuQHQv0
>>366は何使ってんの?
2021/10/10(日) 16:04:08.10ID:2USb7I2AM
>>368
あんまり関数でデータベース検索かけたくないけどかけなきゃいけないならXLOOKUP、自分以外が使う可能性があるならVLOOKUPかHLOOKUPかなぁ
状況に合わないならMATCHも使うけど使用優先度は低め

VBAにやらせる時も中に確実に存在する場合でなければRange型にFind使って放り込む事が多いかも
Is Nothingで見つからない場合でも処理が止まらずに弾けるし
2021/10/10(日) 16:23:38.63ID:iKRuQHQv0
あごめん>>364かと思ってた

処理が止まらずにってのすごい大事だよなぁ
2021/10/10(日) 16:30:18.62ID:6uQRu7X1M
>>370
364だけどVLOOKUP使えるならVLOOKUP
そうでなきゃINDEX+MATCH
大抵そうじゃないの?
2021/10/10(日) 16:51:12.87ID:JSJMRLhD0
ある行を内容の変更は自由にできるけど削除できないようにすることはできますか?
2021/10/10(日) 17:26:53.27ID:rp73utgy0
それ、ここでする質問?
374デフォルトの名無しさん (ワッチョイ 0668-Mxyx)
垢版 |
2021/10/10(日) 17:53:50.05ID:19DRUExW0
>>372
削除を感知して、
https://kirinote.com/excelvba-row-event/

削除されていれば
appliction.undo
ってのはどうだろうか
2021/10/10(日) 18:04:32.90ID:u+pPz2Uo0
ゴミみたいな回答ばかり
376デフォルトの名無しさん (ワッチョイ 9eda-h0Ad)
垢版 |
2021/10/10(日) 19:05:42.11ID:eL4HRu610
じゃあ、ゴミじゃない回答よろ
2021/10/10(日) 19:35:34.55ID:rFwRYXWV0
「削除できないように」というのが:
・「セルや行の削除をできないようにしたい」→シートの保護で対処
・「値の変更はできるが消去(空欄に)できないようにしたい」→入力規則で対処
2021/10/10(日) 20:12:04.54ID:eL4HRu610
対処の方法がわからないのかと思ったら、対処する方法があるのかどうかの質問だったのかw
2021/10/11(月) 00:26:21.39ID:Z2LLk70Q0
>>377
シートの保護で削除不可を選んでも全ての行が削除不可になること,またセルの内容変更もできなくなるので希望に合いません.
374さんのやり方をVBA画面をで書くしか無いですかね
2021/10/11(月) 14:09:59.80ID:7nZn8gcC0
>>379
保護する前に行選択しておけばいいやん
任意の場所だけ編集不可にできるよ
2021/10/11(月) 14:59:32.76ID:Z2LLk70Q0
>>380


> 任意の場所だけ編集不可にできるよ
編集不可ではなくって、編集可で削除不可にしたいんです。
2021/10/11(月) 18:57:29.54ID:nQqo0+vnM
空白に編集する場合とかどう取り扱うつもりなんだろう
2021/10/11(月) 20:49:58.25ID:SLAXBehE0
クビか配置転換したほうがよいかと
384デフォルトの名無しさん (ワッチョイ 0b8e-o/se)
垢版 |
2021/10/11(月) 21:18:23.92ID:oro4FUng0
馬鹿でもある程度作れてしまうからダメなんだよな
2021/10/12(火) 18:51:44.09ID:F8L1eENx0
それを求める環境が悪い
2021/10/14(木) 18:44:35.26ID:FbYeSmKT0
空白は削除じゃないんじゃね
2021/10/14(木) 19:05:30.78ID:DEjpZ/5cr
メーカー開発設計だけど実験データ処理とかで
なれないながら頑張ってvba使ってるけど
試行錯誤で調べながらだからあんまりシート使ってるときと比べて効率化できてる気がしない…
でもシートでチマチマするよりは知的労働してる気がするし
いつかのペイオフを期待するわ
2021/10/14(木) 20:42:17.77ID:BHqqoV+20
あるレベルを超えると突然やりたいことはこうやりゃいいじゃんってなってバリバリ書けるようになる
389デフォルトの名無しさん (ワッチョイ 0668-Mxyx)
垢版 |
2021/10/14(木) 22:26:04.22ID:FxTzsGq40
set覚えてオブジェクトの概念覚えてイベントを理解してしばらくするとほぼ全ての場面で対応できるようになる
2021/10/15(金) 06:17:54.01ID:YCIon6in0
色々覚えて余計な知識が付いてきて、
これはもっと綺麗に書けるんじゃないか?っていう欲が出て進まなくなる事が増えたんだけどどうすりゃいいのか
今までは明らかに冗長で読みづらいコードが多かったけど、生産性で見れば高かったように思う

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

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

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

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

>>391とは逆だけど、vbaの場合は関数やモジュールはあまり分けなくても大丈夫だよ
他の言語だと10行超えたら別モジュール、なんて言われる事もあるけど
vbaだと単一モジュール・単一関数で終わる方が見やすい事も
2021/10/15(金) 08:56:32.98ID:Ob8xTIA6M
メソッドが3つ以上にできそうなときはクラスを検討する
394デフォルトの名無しさん (ラクッペペ MM7f-xEoX)
垢版 |
2021/10/15(金) 09:22:10.96ID:Y66b/sjXM
美しさより速さだよ
最初の頃は両立するが(無駄なSelectなど)
次第によ醜くなっていく
395デフォルトの名無しさん (エムゾネ FFbf-mxW8)
垢版 |
2021/10/15(金) 10:10:42.08ID:Sjupi756F
もう3年くらいExcel使ってないけど全然困らないωωω
2021/10/15(金) 11:34:26.87ID:r1bpZsgJ0
ふーん
2021/10/15(金) 20:36:17.72ID:WLz9ti2OM
>>395
なんでこのスレに居るの?
2021/10/15(金) 21:42:47.27ID:YCIon6in0
>>391,392
ありがとう

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

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

まあ言語自体も開発環境も貧弱すぎるからまとめたくなっちゃう感覚はわかるけど
402デフォルトの名無しさん (ワッチョイ 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
2021/10/16(土) 16:51:56.90ID:a6cW1Kja0
test3()なのにcallで引数渡そうとしてる
2021/10/16(土) 17:03:21.91ID:cq/EQnSr0
VariantにはArrayとかも入るから ()付けても書式エラーにはならないのかな
2021/10/16(土) 17:06:32.68ID:eJomN4xc0
>>402
test3()は引数がないのに引数をわたそうとしている。

test3()は関数なのにy=test3(x)という構文ではなくてcallでtest3()を呼び出しいる。
2021/10/16(土) 17:09:51.40ID:cq/EQnSr0
test3の実行後にエラーになるのがこの質問のミソだと思うよ
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
2021/10/16(土) 18:35:14.73ID:Pp6vdwK70
確かにこれではtest3は動かない
2021/10/16(土) 18:36:14.79ID:njPM+lzE0
>>402
test3まで処理が正常に行われたなら気にしなくていいんじゃね
2021/10/16(土) 18:46:34.14ID:m1u7MgLp0
ステップ実行させたら確かにtest3実行するな
こんなのコンパイルエラーで良いと思うんだが、なかなか興味深い
411デフォルトの名無しさん (ワッチョイ 6b01-Avck)
垢版 |
2021/10/16(土) 18:57:45.79ID:EZGI4ZK10
ありがとうございます!
test3はsubでよかったんですね。
参考にしながらいろいろ試したらできました。
すごく助かりました。
2021/10/16(土) 19:30:00.02ID:m1u7MgLp0
いや、問題はSubかFunctionかじゃないんだが
FunctionをCallしても、戻り値が捨てられるだけで別に問題はないぞ
名前の付け方がまあアレだが

Dim WS As Worksheet の行消して

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

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

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

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

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

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

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

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

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

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

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

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

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

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


Sub test()

Gyo = Selection.Row

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

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

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

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

Workbooks(Namae1).Close

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

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

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

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

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

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

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


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

Set wb = ThisWorkbook
Set ws = ActiveSheet

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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

例えば、Ruby なら、

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

p Dir.glob( glob_pattern )

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

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

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

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

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

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

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

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

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

Range("A1:F3").ClearContents

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

End Sub

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

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

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

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

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

type MatrixIndex
Row as long
Col as long
end type
dim src as MatrixIndex,dst as MatrixIndex
2021/10/22(金) 23:34:57.82ID:MCKX1YxAa
>>504
偶数奇数の数列ですね!ありがたやー
>>505
んー データシートの消し込みって一般常識なんですかね?
まっコメントアウトするだけだし
 iとjが逆かな? でもなんとかなりそう!
ありがとうございましたア!
2021/10/22(金) 23:40:58.45ID:rmoybpwYa
>>507
プログラムは作業の手順書とはいえ
>>505さんのクラスモジュールを使うだとか
ユーザー定義型変数を使うという発想に至りませんで・・・
皆様ありがとうございました。
510デフォルトの名無しさん (ワッチョイ e98e-Ti9O)
垢版 |
2021/10/23(土) 02:07:03.33ID:3lNDidpi0
いつものあいつ
2021/10/24(日) 01:40:51.53ID:BvAAjUlj0
>>498
G列に上から1,2と入れて、さらに下方のデータの無いG列に1,2とコピペする
表全体を選択してフィルターを適用。G列でソートする
以上で一行ごとに空行が挿入される
つづいてD1:F2を選択、コピー
A2に形式を選択して貼り付け(空白を無視する)
出来上がり
2021/10/24(日) 02:32:09.51ID:k5qcq0CGa
>>511
別解ありがとうございます
テンプレートファイルがあればそれで良いかもしれませんね
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
2021/10/24(日) 10:52:43.48ID:m64p+skw0
>>513
自己レスです。
スクリンショットのリンク先を間違えました。
https://imgur.com/qJeXnl9
が正しいです。
515デフォルトの名無しさん (ワッチョイ 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した
ファイルが作成されてしまいます。

これを解決する方法があれば、教えてください。
2021/10/24(日) 14:29:28.09ID:phaY1aKk0
ひとつのシートボタンだけ
まとめたほうが楽じゃないの?
517デフォルトの名無しさん (ワッチョイ c668-OyHA)
垢版 |
2021/10/24(日) 14:39:49.48ID:DK1tlC+k0
>>513
他ソフトのショートカットと干渉してる可能性がある
例えばalt+F11はGeforceとかぶって使えなかったりする。めんどい
518デフォルトの名無しさん (ワッチョイ c668-OyHA)
垢版 |
2021/10/24(日) 14:40:27.40ID:DK1tlC+k0
>>513
問題の切り分けとして、
Ctr+Shift+F
をCtr+Shift+KなりCtr+Shift+Uなり、色々試してみて
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は外す方法が見つかりませんので別の組み合わせに変更します。
2021/10/25(月) 21:49:13.26ID:YikV54AJ0
ショートカットに拘るのが
わからん
521471 (ワッチョイ 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に重複もありません)
2021/10/26(火) 14:40:57.52ID:geAm6QgM0
「この名前は既に使用されています。」って言ってんだからそのシートが存在するんでしょ。見当たらないなら非表示になってるか
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しか使えないためこのようなやり方をしたのですが、もっと適切な方法があれば教えて頂きたいです。
524471 (ワッチョイ 2eda-OyHA)
垢版 |
2021/10/26(火) 15:50:27.98ID:NeMLM07o0
>>522
非表示でもないです
そもそも「原本(2)」という名前のシートがなぜ作成されるかも謎なんです
(「原本」があるので、「原本(2)」が作成されるときに記載のエラーになるのでは
と推測しています)
2021/10/26(火) 16:18:01.43ID:Uox0HVAS0
>>520
ショートカット以外だとリボンにカスタム登録するしかないけどいちいちマウスを使うと
キーボード操作の流れが途切れる。
2021/10/26(火) 16:35:47.94ID:cmR9o8NP0
そりゃ原本ってシートをコピーしたんだから原本(2)って名前のシートができるだろ
2021/10/26(火) 17:04:12.98ID:geAm6QgM0
>>523
連番をカウントする変数を3つ作ればいい
528471 (ワッチョイ 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
2021/10/26(火) 17:29:10.65ID:W8WFYMpad
>>527
分かりませんでした!もう少し詳しく教えていただけないでしょうか!
2021/10/26(火) 17:39:37.61ID:geAm6QgM0
a=1:b=1:c=1
for i=1 to 最後の行
if instr(cells(i,1),"a")>0 then
cells(i,2)=a
a=a+1
elseif instr(cells(i,1),"b")>0 then
cells(i,2)=b
b=b+1

end if
next i
みたいな
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
2021/10/26(火) 22:19:38.61ID:GuH7IxvP0
暇だから書いたけど、実際やるなら>>530みたいなので済ます戸思う
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
2021/10/27(水) 00:02:27.06ID:d3yRZmnd0
条件付き書式でいいんじゃね
2021/10/27(水) 00:17:15.91ID:PN2o+9fe0
条件付き書式でいいが、どうせVBAでやるなら入力のたびに書式をクリアしてから再設定する方がいいよね
2021/10/27(水) 19:45:59.71ID:DgEx7n5q0
条件付き書式がいいんじゃないかなぁ
2021/10/27(水) 20:46:04.85ID:Pols7qyl0
>>533
If Range("D1").Value <> "" Then
あとはChangeイベントにする
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
2021/10/28(木) 11:50:21.99ID:WDBBEMQR0
>>538
できた!これから手順を書いていく。
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]ボタンを押してアドインウィンドウを閉じる。

[開発]タブ内の右端に[エクスポート][選択エクスポート]が現れる。
541デフォルトの名無しさん (ワッチョイ 0605-/PVD)
垢版 |
2021/10/28(木) 16:45:24.43ID:IU5+Uq0S0
Excel 2019
「オプション」−「詳細設定」の「グラフィックアクセラレータを無効にする」のチェックを
VBAで設定するにはどうすればいいでしょうか?
AccessだとApplicationのSetOptionやGetOptionでできるんだけど、
Excelには見当たらないのでよろしくお願いします。
2021/10/28(木) 19:13:26.37ID:t5V0CZ4Da
https://ja.play-and-more.com/4226-turn-off-hardware-graphics-acceleration-office-2013
ハードウェア アクセラレータ―の設定については、
Excel と Word の設定が連動しているので、
Excel のオプションから設定を変更することで
Word 側にも設定を反映することはできます。
2021/10/28(木) 20:43:34.51ID:rkEXdrl2d
>>530
>>531
ありがとうございます!
別のケースに応用できるのでありがたいです!
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起動時にマクロを有効にするか確認
がはいり解決になりません。
2021/10/30(土) 12:52:49.36ID:MclRPTdP0
>544
信頼できる場所に追加するとか、デジタル署名付けるとかしたら行けるんじゃ?
しらんけど
2021/10/30(土) 15:59:41.68ID:jbS9woJL0
>>545
知らんのかい
2021/10/30(土) 16:14:32.06ID:jbS9woJL0
>>545
personal.xlsbを信頼できるドキュメンに設定したらできました.
無礼な物言いごめんなさい.
548デフォルトの名無しさん (アウアウキー Sa55-Jw6B)
垢版 |
2021/10/30(土) 16:52:18.20ID:u+oDsXHga
ゆるさん、打ち首じゃ
2021/10/30(土) 18:39:08.12ID:jbS9woJL0
めんご
2021/10/30(土) 18:39:42.42ID:q+2005If0
りんご
2021/10/30(土) 18:44:01.08ID:8M2WunKL0
マンゴ
2021/10/30(土) 22:30:09.59ID:hcWJ/Uj70
三兄弟
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 でクリアしてくれると思ってたんだが…
554デフォルトの名無しさん (アウアウキー Sa55-Jw6B)
垢版 |
2021/11/04(木) 12:30:43.13ID:h43gOvN2a
LとRはいいの?
2021/11/04(木) 12:43:19.95ID:onPWkBOz0
ごめん、そこは単なる書き間違い
実際のコードはLで統一されとります
2021/11/04(木) 13:10:37.18ID:5T7tzysMd
--ここから読む--
2021/11/04(木) 16:49:49.42ID:or1HotUn0
コボル、フォートラン、LISP、VBA、、、
2021/11/04(木) 19:17:22.94ID:hoh+rIGN0
>>557
色々行ったけど一つとしてものにならなかった…?
559デフォルトの名無しさん (ワッチョイ 1901-tWn2)
垢版 |
2021/11/04(木) 19:43:59.36ID:ipFD2P4r0
エクセルでチェック表作った

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

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

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

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

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

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

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

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

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

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

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

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

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

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

現実を受け入れて、バカにも使える仕様を考えるのが仕事ってもんだ
576デフォルトの名無しさん (スフッ Sdb2-slLX)
垢版 |
2021/11/05(金) 09:17:23.17ID:KTVj1H8Jd
それはまあそうなんだけど資料を揃えておけば
ひとまず相手側のせいにできるからそれを根拠に文句は言いやすいわ
577デフォルトの名無しさん (アウアウキー Sab1-jU0I)
垢版 |
2021/11/05(金) 10:08:06.00ID:X0+Pa++fa
現場で変更するのはもとファイルが使いにくいからじゃないのか
2021/11/05(金) 10:16:00.53ID:ccfSCjSv0
確かにチェックつけるだけなのになぜ改変されるのか謎
2021/11/05(金) 10:22:26.73ID:UB8UVAT80
よく見たら提出って言ってるな。
フォーマットに整形させたファイルをマクロつかって登録させる仕組みじゃないのか。

もしかしてVBAの話ですらない?
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ではなく別のもっと大きな値をとっている可能性が果てしなくでかいわ
581デフォルトの名無しさん (スフッ Sdb2-slLX)
垢版 |
2021/11/05(金) 10:52:29.16ID:KTVj1H8Jd
デバッグで値確認していけばいいだけの話
582デフォルトの名無しさん (ラクッペペ MM96-sHbI)
垢版 |
2021/11/05(金) 12:18:28.52ID:gSvscUzNM
確認した結果、言語に致命的な問題があったという研究報告だろ
異論があるなら論文で提出しろや
583デフォルトの名無しさん (ワッチョイ b145-9ETr)
垢版 |
2021/11/05(金) 12:19:13.47ID:WyPtUDby0
文系プログラマにデバッガ使えは酷
584デフォルトの名無しさん (ワッチョイ b145-9ETr)
垢版 |
2021/11/05(金) 12:24:56.88ID:WyPtUDby0
研究報告は5chで
2021/11/05(金) 13:48:49.56ID:5gsLg44lM
>>576
毎回一人ずつ文句を言うのもかなり面倒な作業だと思うがな
俺なら同じ時間と手間を掛けるならパソコンに向かってコーディングしてた方がいいわ
586デフォルトの名無しさん (アウアウキー Sab1-jU0I)
垢版 |
2021/11/05(金) 17:15:34.16ID:T1OvPNHaa
作業ルールの変更は職場長の許可もらってやれよ
勝手に変なシート作ってフォーマット変えるなとか言われてもね
2021/11/06(土) 09:43:33.18ID:GqSttEtV0
年末調整面倒くさい
何故に毎回フォーマットを変えるのか
いや、分かるよ、控除や税金計算が変わってるんだから仕方ないけどさ、
国には毎年キチンと高い税金納めているんだからEXCELで自動計算してくれて、それ印刷して提出すればいいくらいのもの作ってくれないのかなぁ
2021/11/06(土) 09:54:07.39ID:tOYszMkkM
>>587
いや、むしろ自治体から「年末調整やっておいたから内容確認して」
と連絡メールが来るくらいのことをしてくれていいと思う
2021/11/06(土) 11:02:12.05ID:I7EssLBv0
>>587
うちの会社はイントラで内容確認して問題なければ「申請する」ボタンをクリックするだけだよ
俺は嫁がパートに出てるからその年収入力が必要だけど昔に比べたらめっちゃ楽になった
2021/11/06(土) 11:40:54.21ID:FYF0HF0H0
ちょっと思いて調べたらユーザー定義関数でもスピルできるんだな
今度実験してみるか
2021/11/06(土) 13:59:19.77ID:hCRiIaw50
>>587
高額納税者なら会計士にたのめばええ
控除とか支給金とか、毎年新しい制度まできちんとチェックして、うちで使えるやつを教えてくれる
家族構成まで考慮して節税のアドバイスもくれるし、確実に手数料以上のメリットがある
2021/11/06(土) 19:50:35.22ID:uGoYMeGG0
>>589
扶養に入っていていてもメルカリ等で得た利益を合計すると扶養から外れることがあるからな
2021/11/07(日) 03:10:59.12ID:4qrovYD50
税理士のことを会計士って呼ぶやつはかなりの高齢だって聴いたことがあるわ
2021/11/07(日) 06:37:50.24ID:so93UNIl0
んな奴おらん
会計士は公認会計士の事
595デフォルトの名無しさん (ワッチョイ 9eda-jU0I)
垢版 |
2021/11/07(日) 22:57:31.69ID:XNg8pwBQ0
オランダはオラんだ
2021/11/07(日) 23:38:18.06ID:V/DqJR+40
シンガポールの芯がポール
2021/11/08(月) 08:49:01.66ID:3W+jmNKxM
タイ米でタイ飯を炊く
598デフォルトの名無しさん (アウアウキー Sab1-4u4U)
垢版 |
2021/11/08(月) 12:53:20.11ID:TKWun27Sa
そびえ立つソビエト
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
2021/11/08(月) 14:09:40.47ID:syf9kZiP0
StringならString * 10 とかでできる。
Longは大きさ決まってるから指定できないはず。
2021/11/08(月) 16:24:53.09ID:UsmHmtDwM
>>587
前半は分かるけど、なんでそこでエクセルが出てくるんだよ
2021/11/08(月) 20:42:50.40ID:66GUt1hW0
>>599
クラスつくってプロパティの代入時にチェックいれればいいんじゃね
2021/11/08(月) 20:52:16.35ID:bylJ/Cyl0
>>601
数式だけでちゃちゃっと出来そうじゃん
そんなんで本格的なWebサイト作ってアクティブレポートとかではくより
このEXCELファイルダウンロードして必要なところに入力してねで終わらせた方が安上がりだし
むしろここ、EXCELVBAのスレだからEXCELにすらかすってないこと書くのってなんか気が引けるじゃん
2021/11/09(火) 09:52:46.91ID:cbbOFy6t0
というか、最悪Webフォームやらにして、番号言えば参照してもらえるって感じでいいとおもうけどね
印刷とかしてもってくのめんどいし
本人確認で行くのはしゃあないとして

ま、スレ違い
2021/11/09(火) 15:30:51.99ID:SzXGWqe30
>>600
TypeてVBAでできるけど、VBScriptだとできないんだな。
やりたいことは全銀フォーマットをCSVにしたかったんだけど、別のやり方でやったわ。
2021/11/10(水) 22:53:12.24ID:lHaNkZWD0
>>605
それ普通じゃん
2021/11/10(水) 23:10:54.65ID:n4nrpIYq0
>>605
正規表現で一括置換すればいいだけだな。
2021/11/11(木) 22:25:28.82ID:4U2+Csw00
問題を解決するやり方が複数ある場合は作る人のセンスがでる
速度重視なのか汎用性やメンテナンス、あるいはただ動けばいいとか
2021/11/12(金) 07:19:28.68ID:7noZI+XHd
単に技術・経験の差が大きい
2021/11/12(金) 16:46:18.75ID:xE6WDQNQ0
VBAっていうかエクセルの話題かもしれないけど、
ユーザーに入力させたテーブルがあってそれを校正するとき、
「間違っている部分」と「そこの入力形式の説明と記入例」をどうやって表示したら分かりやすいと思う?

イメージとしては「入力形式を確認する」ボタンをクリックすると
間違い場所が何らかの方法で説明されて、
ユーザーがそれを見ながら修正する感じです。
2021/11/12(金) 17:12:52.04ID:qAk4Oa1rM
>>610
普通に入力規則使えば?
変なオレオレ方式作られるより慣れてて分かりやすいでしょ
2021/11/12(金) 18:11:45.18ID:xE6WDQNQ0
>>611
複雑な形式(5〜10文字の英数+アンダースコア+5文字の英数の繰り返し用のような)も多数あるのですが、可能でしょうか。
GoogleスプレッドシートならSplit関数があるので捏ね繰り回せばパース出来なくはないですが・・・

ユーザー定義関数で入力規則が設定できるのかとも思ったのですが、
「指定した範囲の名前は見つかりません」と出てしまい、
そもそも関数として認識されませんでした。
2021/11/12(金) 18:36:55.58ID:grozR+8R0
以下のようなマクロが組みたいです。

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

> 「そこの入力形式の説明と記入例」
メッセージ表示ればいいけど修整箇所がたくさんあるとウザくなるからそういうことが予想されるケースでは俺ならエラーセルに色付けしてそこが選択されたらステータスバーに表示するとかするかな
2021/11/12(金) 19:56:06.94ID:1Dl5hXGo0
>>612
正規表現だろうな
2021/11/12(金) 19:59:42.26ID:USYnrtRo0
正規表現って言うと卑猥なことを言ってるような気がして口では説明しにくい
2021/11/12(金) 20:24:37.20ID:Ncd0depJM
可愛い女子後輩が「せいきひょうげん教えて下さい!」なんて言ってきたらそれだけで射精してしまうよな
2021/11/12(金) 21:37:44.97ID:Bm/JCeux0
え?何の表現?
2021/11/12(金) 22:29:48.65ID:a3j0d+bF0
ここでぬいたでーたをこのせいきひょうげんでちゅうしゅつしてそこへそうにゅうしといて…
2021/11/13(土) 00:19:30.49ID:IngrJLwZ0
>>616
ステータスバーに書かれていると気づいてもらえるかどうか・・・

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

ただこの方式だとユーザー定義関数使うとマクロ無効にされてる状態では正しく反応しないのが難点だけど。
2021/11/13(土) 05:16:16.94ID:x1CN7sQN0
>>622
> ステータスバーに書かれていると気づいてもらえるかどうか・・・
セルのどこかに表示するとかいいと思うよ
そこら辺は好みでどうぞ
2021/11/13(土) 06:02:35.99ID:HLrAQBx/0
どこに書いてあっても絶対に読まない民が43%いるから(当社調べ)
覚悟しとけよ
2021/11/13(土) 15:19:02.92ID:ANEVI8Gn0
>>612
ExcelVBAのスレなので
VBA(WorkSheet_Changeイベントで起動)でチェックしたら?
2021/11/13(土) 17:00:36.35ID:HusEpJk10
>>613
クエリでフォルダ指定すると、ファイル名一覧を取得出来るから
キーワードで絞込む。
で、インデックス列と希望する書き換えファイル名の列作ってリストにしといて、
あとはVBAで、IF FOR構文とSaveAsあたり使えば
出来るんでね?
628デフォルトの名無しさん (ワッチョイ 158e-OVKX)
垢版 |
2021/11/13(土) 17:14:33.96ID:bgvplZUP0
>>627
ただの決意表明に何でコメントしてるの?
Ruby基地外の自演コメントですか?
2021/11/15(月) 11:13:54.86ID:wYO/ump40
お金が稼げるVBAを組みたいです!
630デフォルトの名無しさん (ラクッペペ MM4b-wt4Y)
垢版 |
2021/11/15(月) 11:56:57.23ID:xIS0g/4FM
ハロワ行け
2021/11/15(月) 19:07:44.02ID:UtsmVGsD0
>>629
ソーシャルワーカーだらけで単価激減
vbaで稼ぐのは諦めろ
632デフォルトの名無しさん (アウアウウー Saa9-3S+0)
垢版 |
2021/11/15(月) 20:28:22.57ID:UvM84Y/0a
将来の希望としての発言なら
まず稼げる力をつけてからそういう会社に就職したらいいんじゃね
あとYoutuberとかなら勝手にやればいい
2021/11/15(月) 21:07:01.94ID:nN/tXQswd
裸エプロンで胸を机に乗せた状態でプログラムする様子をYouTubeに上げれば稼げるかもしれんぞ
2021/11/15(月) 23:28:31.25ID:UtsmVGsD0
やったけど微妙だったわ
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" ]
2021/11/16(火) 03:08:02.41ID:FNimwzj70
>>634
これ思い出した
https://news.yahoo.co.jp/articles/c74cfb53262d1001291948766f2f5abceb2623b7
2021/11/16(火) 16:09:29.51ID:5D9mKY7bF
>>633
https://www.youtube.com/channel/UC9-eWyrUJfPJsRxtXTdx_Cg/videos
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を拾って貰えるんでしょうか。
2021/11/17(水) 14:26:30.65ID:vBkg6J9AM
イベント無効化しろよ
2021/11/17(水) 17:56:35.51ID:3zD8SsO+a
>>639
たったの2行で万事解決
ありがとうございます
Public文字列をスイッチに四方八方から切替えまくってからのこのオチは恥し過ぎる
2021/11/18(木) 11:22:25.43ID:Q3OFtjIpM
>>638
何が起こってて何がしたいのかまるで意味不明なんだが、>>639が回答できた事に驚き
2021/11/18(木) 12:48:11.85ID:A7YSZCxr0
読解力って大事だよね
2021/11/19(金) 07:29:58.87ID:HahswZdrd
vba歴15年だがイベント無効化今知ったわ
2021/11/19(金) 07:42:51.24ID:tUazBZuEM
それ絶対ウソだわ
2021/11/19(金) 14:43:03.48ID:0h6/N7AxM
そういうのって必要になった時に調べるもんだし
今まで一度も使わなかった機能なんて色々あるだろ
2021/11/19(金) 21:00:40.42ID:o1Oq/T8x0
しかしだな
15年もいじってりゃエナブルイベントのせいで無限ループになることくらいあるんじゃないの
2021/11/20(土) 15:14:52.68ID:jiw0H+C10
失われた15年
2021/11/20(土) 20:08:41.79ID:TxFL/ZXr0
2013でSharePointに接続する方法ない?
2019ならADOで出来るんだけど
649デフォルトの名無しさん (ワッチョイ 1b2f-IS5D)
垢版 |
2021/11/20(土) 21:06:56.40ID:4VXr5Xxs0
2021ならAHOで出来るよ
2021/11/20(土) 23:15:05.65ID:MzgsRNiS0
作る前に様式はこれでいいよねって事前に確認したのに、作ったあとに
やっぱりああでもないこうでもないと注文つける
簡単なコードすらまともに書けないゴミの後出し地獄にムカついてくる
じゃあてめえが作れと
651デフォルトの名無しさん (ワッチョイ ef8e-1fs8)
垢版 |
2021/11/21(日) 00:12:13.26ID:VeOo+GZo0
たかがVBAを少し書けるだけで他人をゴミ呼ばわりする馬鹿
こいつみたいな勘違いの思い上がり馬鹿はよく見かける
2021/11/21(日) 00:20:55.86ID:9y2yNJe30
わざわざ作業やり直したくないから様式を事前に確認したのに後出しで人の作業増やすやつをゴミ呼ばわりして何が悪いのかな
お前も後出しで人の作業量増やしそう

自分でやるなら好きなだけ後出ししていいけどな。できないでしょ
653デフォルトの名無しさん (ワッチョイ ef8e-1fs8)
垢版 |
2021/11/21(日) 01:55:02.67ID:VeOo+GZo0
相手の要求を理解して指摘される前に用意しとくものだろ
馬鹿は言われたことしかできないから馬鹿だっての
2021/11/21(日) 02:07:24.62ID:9y2yNJe30
提示した仕様に対してOKが出てるのに
勝手に仕様追加しとけって?キチガイですかね
655デフォルトの名無しさん (ワッチョイ ef8e-1fs8)
垢版 |
2021/11/21(日) 02:12:33.23ID:VeOo+GZo0
相手のレベルに合わせて打ち合わせできないから馬鹿だっての
2021/11/21(日) 02:16:27.01ID:9y2yNJe30
様式見せてるのに相手のレベルもクソもないんだがねキチガイくん
657デフォルトの名無しさん (ワッチョイ ef8e-1fs8)
垢版 |
2021/11/21(日) 02:17:32.02ID:VeOo+GZo0
馬鹿は相手が理解しているかどうかすらわからないから馬鹿だっての
2021/11/21(日) 02:19:43.87ID:9y2yNJe30
相手は様式を理解した上で後出しの思いつきで仕様変更要求してきたんだよ
馬鹿なお前にはこんな簡単な日本語すら理解できないんだろうけど
2021/11/21(日) 04:43:02.55ID:YN582lotM
議事録なり議事メモなりで決定会議や打ち合わせの記録を残しておかないと後で後悔する
2021/11/21(日) 05:13:42.45ID:V2WgyX4h0
議事録だろうが録音だろうが無駄
レベルの低いやつってのは、簡単に前言を撤回して主張を変えてくる
2021/11/21(日) 06:09:13.16ID:CsAuHtPC0
つまり契約概念を理解しない客なわけだ。そんな客は契約は契約ですかと突っぱねて二度と相手にしないことだ。
2021/11/21(日) 06:13:44.85ID:8rSjcXEU0
VBAでなくてもクライアントからの急な仕様変更なんて日常茶飯事だから諦めろん
ある程度の仕様変更なら少ない手間で対応できる作りにするのも腕の見せ所だぞ
まぁ言うてその仕様にすんなら全部1から作り直しやんけって仕様変更もなくはないのがツラいところ
2021/11/21(日) 08:27:37.33ID:V2WgyX4h0
だからメンテナンス性とかモジュール化とかクラスが大切になってくるんだよ
経験を積んで仕様書に書かれてない部分も適切に作り込んでおいて、仕様変更のコストを下げるのも腕の見せ所
もちろん、表向きは大変だと言って渋って見せたり高額なメンテ費用を請求する駆け引きも必要
2021/11/21(日) 08:36:08.55ID:4M98L2BP0
勝手にやってやると調子に乗るだろ
665デフォルトの名無しさん (アウアウウー Sa3b-Z5oZ)
垢版 |
2021/11/21(日) 10:03:03.00ID:zwWMSsz4a
仕様変更っていっも動作確認あわせて1時間もかからんだろ
ここで愚痴る前にさっさと直せよ
666デフォルトの名無しさん (ワッチョイ ef8e-1fs8)
垢版 |
2021/11/21(日) 12:48:58.97ID:VeOo+GZo0
馬鹿だから修正に手間が掛かるようなプログラムしか作れないのだろ
2021/11/21(日) 14:30:08.25ID:CsAuHtPC0
仕様確認を反故にする ユーザーに怒っている人をディスってる奴らが数人いるけど、こいつらは他人をディスってストレスを発散する病んだ人たちなんだろうな。
2021/11/21(日) 15:03:48.31ID:j1X7Mg5t0
プログラム的なものをやってると後出し仕様変更おしさんにはほぼ100%遭遇するからな
2021/11/21(日) 17:22:27.75ID:lG7wwdbAd
>>665
テストやリリースまでのドキュメント作成で実際はその何倍もかかるよね
2021/11/21(日) 17:48:21.28ID:RHabNs0q0
列挙型使ってればデータ収集くらいなら大体は対応できる
2021/11/21(日) 17:56:13.83ID:Cim/yDW60
後出して仕様変更されても、その分の納期と金額を保証してくれるならまあ許せる
そういうやつらは大概は、元の金額のままで同じ納期でやれっていうからな
672デフォルトの名無しさん (ワッチョイ c6da-Z5oZ)
垢版 |
2021/11/21(日) 18:04:49.83ID:rJQke0fG0
>>669
それでもここで愚痴るほど暇な訳だが
2021/11/21(日) 19:36:02.92ID:rJQke0fG0
>>671
個人契約で請け負っているならそういう交渉もあるだろうね
自社開発とかだと上司にそれ言うか?
674デフォルトの名無しさん (ワッチョイ ef8e-1fs8)
垢版 |
2021/11/21(日) 19:50:30.82ID:VeOo+GZo0
エンドユーザーに仕様なんて伝えても理解できないことも織り込めない素人に毛が生えただけのVBAプログラマーがこぼしているだけだからな
2021/11/21(日) 22:53:28.70ID:CsAuHtPC0
>>674
こいつはきっと趣味のプログラマーだな。
676デフォルトの名無しさん (ワッチョイ ef8e-1fs8)
垢版 |
2021/11/21(日) 23:12:50.46ID:VeOo+GZo0
悔しかったか?
どんな仕事でも言われたこと(それも自分が理解できる範囲だけ)しかできない無能に限って、少しプログラムできると天狗になって自分が偉いと思い込む
2021/11/21(日) 23:17:45.36ID:CsAuHtPC0
>>676
俺は100%通りすがりのモンだけど。
お前思いっきり読解力ないな(笑)
2021/11/22(月) 02:02:52.47ID:C2iFLgVU0
人を下に見られる程精通してる人って正直羨ましいわ
知れば知るほどまだまだ知らない事が沢山あるなぁと勉強不足を実感してしまう
2021/11/22(月) 07:01:15.65ID:slGF1Oi+d
知らないから人をバカに出来るんだよなー
2021/11/22(月) 08:46:35.28ID:Pvc6brgHd
>>675
いや、エンドユーザーだよ
2021/11/22(月) 09:28:02.25ID:GKja75Bt0
むしろ人を下にみないと精神状態が不安定なんでしょ
682デフォルトの名無しさん (アウアウウー Sa3b-Z5oZ)
垢版 |
2021/11/22(月) 11:55:26.38ID:L9slPYHUa
15年もやればそうなるんじゃね
2021/11/22(月) 23:06:20.51ID:08E8qmHLd
顔が見えない相手にしか愚痴れないんだろ
我慢してやろうぜ
2021/11/23(火) 00:04:23.39ID:HyKB94hG0
>>663
クラス作ってインターフェース作って多態性持たせてというのは確かに大事だけど
それを使いこなすレベルであればもう能力的にはVBA卒業だよ。
2021/11/23(火) 06:17:53.07ID:Xen9jxSh0
生徒が先生に対して自分は下に見られているとかいうのは違うんだけどね
2021/11/23(火) 10:30:00.53ID:Uhpscs260
その例えがそもそも違うんだけどね
2021/11/23(火) 11:28:47.36ID:Kq5e1ZWqp
天は
人の上に人を作らず
人の下に人を作らず
2021/11/23(火) 11:46:02.03ID:glM4yG/J0
古い話になるがエクセル2003くらいのことにはブック固有のツールバーとそのツールバーにマクロボタンを登録できた.
そのブックをオープンすると固有のツールバーが表示されてブック固有のマクロを簡単に実行できた.

エクセル2013を使っているけどこういう機能はなくなったのかな.
VBAでもツールバーを作れるけど,commandbarオブジェクトにaddしてボタンをaddしてなど面倒すぎるし,なにより全てのブックで表示されるとか,特定のブックだけで表示させたかったらそれ用のマクロをイベントと関連付けて切り替えるなど面倒.
昔のような機能を復活させる方法はないでしょうか?
689デフォルトの名無しさん (アウアウキー Sac7-Z5oZ)
垢版 |
2021/11/23(火) 12:15:05.23ID:2bUUy2X7a
2003インストールしたらできるんじゃないかな
2021/11/23(火) 12:19:08.48ID:glM4yG/J0
>>689
お前はお笑い芸人か
2021/11/23(火) 12:58:36.46ID:CIHUE1VX0
>>688
クイックアクセスツールバーに表示できる
そのブックだけに適用とかの設定もあったはず
2021/11/23(火) 13:55:58.62ID:A++o7U7T0
>>687
人の中に人を作れり
2021/11/23(火) 15:21:24.36ID:/4Q7KTnxa
職場にVBAバカにする人が多くて辛いです。
どうしたら見返せますか?
2021/11/23(火) 15:31:34.69ID:RPYITf6Hd
>>693
他の言語やればいい
695デフォルトの名無しさん (アウアウキー Sac7-Z5oZ)
垢版 |
2021/11/23(火) 15:46:47.44ID:vnr7FnzGa
>>693
VBAのソースを頭から読み返せばいい
2021/11/23(火) 16:56:40.89ID:glM4yG/J0
>>693
VBA と言わなきゃいいんじゃない。どうせ VBA と C の違いもそいつはわかんないだろう。
2021/11/23(火) 16:58:43.07ID:azQICWGX0
>>696
2021/11/23(火) 17:07:40.89ID:pTXgLOiP0
プロシージャモジュールを作ってます
2021/11/23(火) 19:22:11.55ID:Xen9jxSh0
マジレスすると、VBAだから馬鹿にされているんじゃなくて内容がチープだからじゃね
とりあえずセンスのあるグラフとか作ればそれなりに見えると思う
2021/11/23(火) 21:29:31.50ID:h2kETaBe0
Excelでセンスのあるグラフって描けるの?
701デフォルトの名無しさん (ワッチョイ 5f01-iUmB)
垢版 |
2021/11/23(火) 21:42:34.64ID:VKZug2mU0
その件はペンディングでお願いします。
2021/11/23(火) 22:13:21.88ID:d9zk2oza0
高度な処理をするより見た目派手なことするほうが関心されるってのはあるわな
2021/11/23(火) 22:18:57.11ID:Uhpscs260
そら見た目の印象で判断してるからな
実際どんな事やってるのか踏み込む人には効果無し
2021/11/24(水) 17:35:27.48ID:l0nIbD9FM
動いてる感じを演出して見た目を楽しませるの結構大事だよ
書き込んだところをselectするようにしたら、嬉しそうにセルに書き込まれてる様子眺めてた
2021/11/24(水) 18:46:24.44ID:M33cGNY60
リアルタイムの進捗状況見れるしな
そういうの好きな人は懐かしのデフラグも好きそう
2021/11/24(水) 21:02:30.81ID:zoTAHfV40
>>684
VBAがインターフェースだのクラスイニシャライザだのポリモーフィズムだの
実装してくれればいいだけじゃないのかな。

「卒業しなきゃいけない」ものでもないだろ、今の普及度見てると。
2021/11/24(水) 21:45:28.54ID:KGMrLahJ0
>>706
いらんいらん
vbaはあくまで今ぐらいの不便さでちょうどいい
下手にそんなもん実装されたら読みづらくなってかなわん
2021/11/25(木) 19:13:08.61ID:pDjO55r30
>>706
VBAにはインターフェースあるよ
2021/11/25(木) 23:19:56.43ID:WSSTsN1M0
>>708
あったっけ。俺の記憶違いならごめん。

あと、致命傷なのが実質グローバル変数化するエクセルのセルだと思う。
あれ、とてもやっかい。
2021/11/25(木) 23:31:25.24ID:OcubR2wD0
>>691
ありがとうございました。
できました。
711デフォルトの名無しさん (ワッチョイ e263-C1KD)
垢版 |
2021/11/25(木) 23:41:58.44ID:1AcsgpK30
Open/Nameで開く/リネームするファイルの名前に
全角括弧や中黒、半角ピリオドが入っていると
実行時に「エラー53 ファイルが見つかりません」
が出ます。
ファイル名が長すぎるのかと思い短くしたが変わらず、
実行前に上記のような文字を削除しておくとと無事処理が終了します。
しかし手作業で削除するのが面倒なのでそれ以外の対処を知りたいです。
先生方ご教示ください。
2021/11/26(金) 00:05:14.55ID:fWkXgzm/0
うろ覚えだから動かなかったらごめんね
こんな感じにやるといけたかもしれない
Replace(対象のファイル名, "・", Chr(Code("・")))
2021/11/26(金) 17:57:21.05ID:e3tyzrS40
質問です
所定の形式のシートAからデータを取り出し、数値の操作を行ったあと別の形式のシートBに記入すると言うマクロと逆にシートBからシートAに記入するマクロを作りたい場合に楽をする方法はないでしょうか?
今まではA→BとB→Aで2つマクロを作ってたのですが見るところが同じなのでまとめれるように感じたのです
プログラムについて詳しくないので無茶なことを言っているかもしれませんがよろしくおねがいします
714デフォルトの名無しさん (ワッチョイ ff8e-/YRy)
垢版 |
2021/11/26(金) 18:18:33.57ID:6S+lbrca0
またRuby馬鹿か
2021/11/26(金) 19:32:54.64ID:y13IYOoN0
>>713
自分で考えないで他人に作らせるのが一番楽じゃないかな
2021/11/26(金) 20:39:32.12ID:Jy5iToKI0
>>713
Cを作ってそれで操作
2021/11/26(金) 20:40:23.50ID:90E5eyRt0
>>715
まさに今やってるのがそれだな
2021/11/26(金) 21:24:20.33ID:wVBXN9pL0
>>713
その気づきが大事だよな
プロシージャを分けてCallで呼び出して引数はシートにする
2021/11/26(金) 21:29:44.76ID:l5KPHXyn0
もうRubyは飽きたから
VBAで書かないならせめて
今流行りのPythonとか
新たに注目されてるRustとか
いずれWebのExcelで必要になるJavascriptとか
VBAやってる人が次に進みやすい
VB.NetとかC#とかその辺で書けばいいのに
Rubyとかで書いて来るセンスないバカは
死ねばいいと思う
2021/11/26(金) 21:57:57.19ID:sYQtOY9h0
…落ち着けよ
2021/11/26(金) 23:05:04.12ID:Jy5iToKI0
>719
一応マジレスする
rubyにはとんでもないキチガイがいて、そいつが嵐回っている
そのおかげでrubyは総スカン、言語に影響するレベルで貶めされるようになった

キチガイ一人で言語一個潰せたのは割とマジですごいと思う
722デフォルトの名無しさん (ワッチョイ 5701-+aRL)
垢版 |
2021/11/26(金) 23:29:32.65ID:YCQQxNQi0
あわしろ氏が言ってたけど、ベンダーロックインされるから、特定企業の言語は使わないほうが良いよ。
2021/11/27(土) 07:12:17.07ID:/aLCz2Bk0
>>713
値を取得したいセルの範囲をどっかのセルに書いといてその位置を引数で渡せばいいじゃん
複数範囲があるならその複数セルの位置を書いた範囲を引数で渡せばいい。
2021/11/27(土) 07:20:09.69ID:/aLCz2Bk0
あのあわしろ氏とかいうのはアホだから
今はLinuxでさえExcelと似たようなソフトがあってそれでもVBAが動くことか考慮していないのだろう
Cなんか組込系はハードによってすらコードが左右されるのに、必要なときに必要な勉強をすればいいだけなのに変な固定概念を持っててそれを人に押し付けてる
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
2021/11/29(月) 11:44:05.96ID:7iqP84qYM
やっと多態性の概要が分かってきた
2021/11/29(月) 11:52:31.66ID:mgylUf/ZM
範囲を別のところに書いたり引数指定でやればいいんですね
遅くなってしまいましたが色々なご意見ありがとうございます
2021/11/30(火) 12:14:18.10ID:i6pa9Q1E0
>>726

VBの多態性?
2021/11/30(火) 12:24:36.07ID:i6pa9Q1E0
ああ。CallByNameとかを使えば擬似的にできるんだ。へえ。

しかし、クラスイニシャライザと継承を普通に実装してくれれば
…くれないんだろうな、もう。
2021/11/30(火) 13:25:55.62ID:xmFPZymv0
すいません質問させてください。
特定のエラーウィンドウが出たら実行するマクロを作りたいのですが
実行条件の指定の仕方がわかりません。
具体的には「データの入力規制」のエラーメッセージタブで指定した
ウィンドウの「はい(Y)」を自動で押したのちにマクロを実行させたいです。
ご教授お願いいたします。
2021/11/30(火) 16:33:24.70ID:yU0uPSMf0
え、そんなことできるの!?
2021/11/30(火) 17:17:34.47ID:EuUrWRYz0
>>731
エラーハンドラーでできないの?
2021/11/30(火) 18:33:56.15ID:Nxhl39nB0
できないから質問したんじゃないの?
2021/11/30(火) 18:53:53.22ID:gFsrJhmJ0
730です。
vba内?で出たエラーを条件にした処理は探せたんですが、エクセルが出したエラーをトリガーにしたものが探せなくて質問させていただきました。もしあるならば知りたいなと思った次第です。
2021/11/30(火) 19:41:38.94ID:C0MmFQGd0
その入力規制をVBAにしたほうが手っ取り早い
2021/12/01(水) 04:06:37.80ID:RALKNP3F0
なるほど、確かにそうかもしれません。
ありがとうございました。
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)"
2021/12/01(水) 09:26:46.14ID:+HkH87nC0
ありません
2021/12/01(水) 09:26:59.16ID:D4hpf6JM0
>>737
数式を変えるか、セルの書式を文字列にする
Range("A2").Value = "'=(1,2,3," & Range ("A1").Value & ",5,6,7,8,9,""abc"",0)"
2021/12/01(水) 11:09:46.49ID:3lXUqEaB0
>>729
クラスのコンストラクタ自体はあるよ。引数が使えないだけで。
VBAの場合は一般的に言う継承は使えないけども移譲が使えるのでクラスで多態性を持たせる場合は
テンプレートメソッドパターンを使うのではなくストラテジーパターンを使う。
741デフォルトの名無しさん (ワッチョイ 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)」のラベルを使ってリンクを開くをお教えていただけないでしょうか。
2021/12/01(水) 11:45:54.74ID:3lXUqEaB0
>>741
http://officetanaka.net/excel/vba/tips/tips01.htm
2021/12/01(水) 11:51:59.83ID:3lXUqEaB0
まぁその前にExcelのユーザーフォームは
スプレッドシートやグリッドビューや
HTMLでいうTableタグのようなものが無いので
擬似的に一覧を作る方法を考える方が
先だと思うけど。
744デフォルトの名無しさん (ワッチョイ 9ff2-BhQk)
垢版 |
2021/12/01(水) 11:57:47.33ID:QKQZx/r30
Private Sub ラベル地図_Click()
Dim a
a = 地図.Text
ユーザーフォーム.FollowHyperlinks Address:="a"
End Sub

なんとなくこんな感じなかとやってみたのですが、エラーでした。
宜しくお願いいたします。
745デフォルトの名無しさん (スプッッ Sd3f-y/uX)
垢版 |
2021/12/01(水) 11:59:07.74ID:JKRXUH4pd
VBAって初学者はどうやって勉強すればいいんですか?
2021/12/01(水) 12:03:16.45ID:G1NuLHw5M
>>744
=a
だとどう?
2021/12/01(水) 12:12:34.05ID:KAm88z78M
>>745
変数の定義、ループ文の書き方、条件分岐の書き方が分かれば大体の言語はなんとかなる
あとは自分が何をやりたいかによってこんな動作はできるか?あんな動作は可能か?って一つ一つ調べていけばいい
処理速度が遅いと感じ始めたら最適化とかに手を出したり、シークバーを表示することで体感速度を早めたりっていう事を覚えていけば最低限はなんとかなるんじゃない?知らんけど
2021/12/01(水) 12:23:56.22ID:3lXUqEaB0
>>745
「〜をやりたい」という目標を決めたら
後はGoogle先生とマクロ先生に聞けばいいんじゃないかな
2021/12/01(水) 12:31:06.77ID:3lXUqEaB0
>>744
そうだね、
まずは3行目の変数に代入している文字列を
ダブルコーテーションで囲めばいいんじゃないかな。
後、地図.txtってどこのフォルダに格納されているのかな?フルパスで書かないとダメだよね。
最後に>>746の人が言ってるとおり、それだとaという変数の中にある頭を見て飛んでるんじゃなくて、
aというリンク先に飛ぼうとしているよね。
2021/12/01(水) 12:33:40.85ID:3lXUqEaB0
ごめん誤表記
頭×
値◯
2021/12/01(水) 12:42:23.19ID:k/wjCDWPa
>>739
ありがとうございます
無事にできました!
752デフォルトの名無しさん (ワッチョイ 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 がダメなのかなぁ。

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

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

WorkbookかApplicationのを使うとよろし
755デフォルトの名無しさん (ワッチョイ 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
元のマクロデータ結果が消えるのと、フォルダ移管がうまくいきません。誰かたーすーけーてー。
756デフォルトの名無しさん (ワッチョイ d74e-y/uX)
垢版 |
2021/12/01(水) 14:39:40.62ID:WlcvAg5v0
>>747
>>748
ありがとうございます
757デフォルトの名無しさん (ラクッペペ MM8f-aw+H)
垢版 |
2021/12/01(水) 15:27:28.95ID:RRRUPRTbM
今日び小学生でも拡張子変更なんぞせんぞ
2021/12/01(水) 15:29:25.99ID:+HkH87nC0
へぇー
2021/12/01(水) 15:37:37.70ID:Jx6PEbk5M
拡張子なんてずっと前から非表示がデフォルト設定だもんな
表示してるのはIT技術者とマニアぐらい
2021/12/01(水) 17:45:16.35ID:j0FzcgCOM
>>745
解説本読んだら、やりたい事 vbaでググる
2021/12/01(水) 17:45:55.82ID:G1NuLHw5M
>>755
さっきの人もそうだけど、とりあえず変数を""で囲うのやーめーてー
2021/12/01(水) 18:55:24.01ID:mU2lRylq0
>>755
せめてコード載せる時は
全角ダブルクォーテーションやーめーてー
2021/12/01(水) 20:04:07.09ID:D4hpf6JM0
スマホ使いにそんなこと言ってもしゃーないで
2021/12/01(水) 20:12:27.50ID:mU2lRylq0
PCやけど
765デフォルトの名無しさん (ラクッペペ MM8f-aw+H)
垢版 |
2021/12/01(水) 20:28:25.20ID:FnvfENRiM
ExcelスレにはPCからアクセス出来ないからと
全部手打ちのお客さんが稀に良く来るんだよ
いつものひとって呼ばれているけど個体ではなく群体かもしれないね
2021/12/01(水) 21:12:48.54ID:s3di+kE80
なにそれ怖い
2021/12/01(水) 21:14:41.21ID:qDEAEYAb0
>>745
今やってる手作業を全部マクロで書いてみる
とにかくひたすら、
「入力を最低限に」
「出力を正確に」
を考えると、実用十分な面で腕が上がる

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

a=“c: \tmp \”
みたいになります。
解決策をご存知の方いませんか?
2021/12/01(水) 22:22:18.62ID:+HkH87nC0
>>772
どの時点で入るのか
2021/12/01(水) 22:22:56.56ID:juM9jQJh0
VNAじゃ無理だな
2021/12/01(水) 22:28:54.98ID:jZirIxvE0
>>773
パスを連結する所です。
次のようなコードです。

file = wsh.specialfolder(“Desktop”) & “\test.csv”
2021/12/01(水) 22:31:48.27ID:+HkH87nC0
>>775
実行時なのか書いてるときなのかってこと
2021/12/01(水) 22:37:04.57ID:jZirIxvE0
>>776
実行時です。
lenで長さを調べると、不明な文字分、長くなっています。
2021/12/01(水) 23:27:22.80ID:J8+WBzZ00
Ruby の文字列には、こういうメソッドがある

chomp は、文字列の末尾に改行コードがあった場合に、文字列の末尾の改行コードを削除します。
strip は、文字列の前後のホワイトスペース(空白類?)をすべて削除します
2021/12/01(水) 23:37:48.12ID:qDEAEYAb0
使用者の低下率ナンバーワンのrubyか
2021/12/01(水) 23:47:40.21ID:dyETJfYa0
とりあえず、半角スペース?をRelaceしてその場は乗り切ればいいんじゃない
根本的な解決じゃないだろうけどVBAなんだからその場しのぎで十分
781デフォルトの名無しさん (ワッチョイ ff8e-/YRy)
垢版 |
2021/12/02(木) 02:56:08.75ID:dh8YZ99S0
>>780
Ruby馬鹿に引っ掛かる馬鹿
2021/12/02(木) 05:50:03.53ID:TBtFTtDf0
>>780
半角スペースでは無い文字だったので、置き換え出来ませんでした。
結局、動的にパスを連結するのは諦めて、一つの文字列にして対応しました。
お騒がせしてすみませんでした。
2021/12/02(木) 09:23:36.17ID:QiUejsWg0
絶対別のどこかにバグがあるパターンやな
ステップ実行しながら変数の中身をチェックしてみ
2021/12/02(木) 15:07:50.32ID:25yj5vFO0
全角空白、CR、LF、ESC文字、TABコード、00H、のどれかに10ガバチョ
不明文字の文字コード調べればすぐわかるのになぜしないのか?
2021/12/02(木) 19:13:44.99ID:Q4ipSZlu0
>>747
> 変数の定義、ループ文の書き方、条件分岐の書き方が分かれば大体の言語はなんとかなる

OOPからのパラダイムシフトすら起きつつある今、それだけでは
ソース見て、?????にならないか。
2021/12/02(木) 19:16:51.76ID:YGzDOnnRM
基本を押さえれば何が出来るかとかどう調べればいいか分かるって言う話なのになんでそれオンリーで戦おうとするん
2021/12/02(木) 19:34:11.48ID:vBr1OiF/0
縛りプレイ?
2021/12/02(木) 20:00:04.69ID:Q4ipSZlu0
ああ、なるほど。すまんかった
2021/12/02(木) 20:17:25.75ID:i+BC+GFiM
それがこのスレに集う人達のクォリティ
2021/12/02(木) 21:25:27.56ID:8cWBX7d10
知らんけどって最後につけてるからセーフ
2021/12/02(木) 22:03:16.66ID:gXiV7p3O0
知らんがな
2021/12/03(金) 04:54:46.81ID:a7s6mUHw0
>>775
csvがユニコードだったのではなかろうかもう解決したみたいなのでどっちでもいいけど
自分の場合は、ウェブからコピペしたセル上の文字列がユニコードなのにそれをvbaで扱おうとしたらちょっと嵌まったまあなんとかうまく処理できたけど
vbaのエディタはユニコードに対応してないそうだから困っちゃうね
2021/12/03(金) 05:26:40.56ID:6JzCupcO0
>>792
これ全く再現できないんだよな

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

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

質問者は素直にコードを一部始終書いて、
「ここでこうなるようにしたい」とそれだけ書けばいいのにと常々思う。
2021/12/03(金) 07:05:37.24ID:8nMwCozS0
>「ここでこうなるようにしたい」とそれだけ書けばいいのにと常々思う。

禿げ上がるほど同意
2021/12/03(金) 08:32:26.43ID:5OfA8a2a0
また髪の話してる(´・ω・`)
796デフォルトの名無しさん (アウアウウー 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を動かせますか?
2021/12/03(金) 12:53:21.83ID:zxa5p7EY0
>>796
認証している画面(ログイン画面)は分かりますか?
そもそもですが、一度ログインした情報をクライアントサイドで持ち回っているとは限りませんよ。

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

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

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

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

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

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

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

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

Seleniumでは、要素が出現するまで待ってくれるので、操作しやすい。
この機能がない場合は、適度にsleep して待てば良い
2021/12/03(金) 21:16:21.68ID:8nMwCozS0
>>807
うわぁ・・・rubyってこんなのしかいないのか
rubyの勉強しようと思ってたけどもうやめる
809デフォルトの名無しさん (ワッチョイ 0a8e-9fbA)
垢版 |
2021/12/03(金) 22:10:47.69ID:j3L0Seq20
またRuby馬鹿の釣りに引っ掛かった馬鹿ども
2021/12/03(金) 22:14:21.75ID:SLFpaNjyM
と、馬鹿が申しております。
2021/12/03(金) 23:03:37.81ID:6JzCupcO0
>>796
Basic認証の情報はホスト名毎に自動的に送信されるはずだから、
事前に認証後に遷移するURLへAuthorizationヘッダに認証情報を追加した状態でNavigateメソッドを実行しておけばどうかな。
そのあと通常通り辿ってBasic認証が求められるページに行ったらどうなる?
2021/12/04(土) 02:28:53.31ID:DkK1m4G2M
https://www.vba-ie.net/sp/collection/iebasic.php
2021/12/04(土) 14:10:39.93ID:6zlbLfe7a
根本的な質問で恐縮ですが。EOMonth関数でシリアル値が取れるのはわかっていますが、そこからMonthのみ取り出したらその「月数」のデータ型も日付シリアル値の一部のままと考えていいでしょうか。
それともただのint型やstr型などになってしまうのでしょうか。
814デフォルトの名無しさん (ワッチョイ 6ee6-QcgA)
垢版 |
2021/12/04(土) 14:42:38.47ID:o3TwiRqy0
>>813
https://support.microsoft.com/ja-jp/office/month-%E9%96%A2%E6%95%B0-579a2881-199b-48b2-ab90-ddba0eba86e8
2021/12/04(土) 14:59:32.05ID:cNOnihHeM
>>813
月を取り出したらDateserialで好きな日付のシリアル値を作ればいいアル
2021/12/04(土) 16:20:58.44ID:6zlbLfe7a
>>813 >>814
ありがとうございます
2021/12/04(土) 16:21:36.10ID:6zlbLfe7a
>>814 >>815でした。
すみません。
改めてありがとうございます
2021/12/04(土) 20:10:40.70ID:cgBQWMPD0
1.A列にシートごとに不特定多数(X)のセルがある
2.セルの個数にしたがってを4等分する(小数点以下切り上げ)
3.等分したデータをBCDへ移動する

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

データの最終行の取得方法はわかったけど使い方がわからない…
2021/12/04(土) 20:21:19.59ID:2gyaMYwu0
>>818
セルの個数が小数点になるのが理解不能
なんか文がおかしい
2021/12/04(土) 20:26:20.12ID:2gyaMYwu0
>>818
ごめん4等分か。
セル個数数えて4で割れば数は出ると思うから、
その数をcellsでn、n+1から2*n、2n+1から3nで範囲選択してコピーとかすればいいんじゃね
2021/12/04(土) 20:27:45.56ID:cgBQWMPD0
>>819
レスありがとう
4等分って書き方が悪かったかな
A列セルが1234こあったら1234 / 4 =308.5
ABCD列に309 309 309 307こずつ配置したい
2021/12/04(土) 21:22:26.78ID:cgBQWMPD0
これが構文エラーになっちゃうのはなんででしようか?
https://i.imgur.com/uZw8aRE.jpg
2021/12/04(土) 21:40:43.97ID:26JgLixHM
>>818
> 2.セルの個数にしたがってを4等分する(小数点以下切り上げ)
[1] A, B, C 列の個数 = WorksheetFunction.RoundUp(A列の個数, 0)
[2] D列の個数 = 元のA列の個数 - 3 * ([1]で求めた個数)
2021/12/04(土) 21:44:29.23ID:26JgLixHM
>>822
なんかに代入してないから
2021/12/05(日) 05:50:33.57ID:LmHUo9b4p
>>793
mac版で編集、保存したファイルでなった事あるよ。
winで作ったxlsmをmacで編集、保存する。
後phpexcelなどのライブラリーを使ってwebからダウンロードさせたファイルでも同様の現象になることがあったなぁ。
2021/12/05(日) 07:36:04.48ID:pHE92v1E0
MacのExcel VBAは使い物にならないからやめとけとあれほど
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
2021/12/05(日) 11:29:11.55ID:PoobQwg20
数値をバーコード化するマクロ使うと、かなりの確率でWorksheet クラスの Paste メソッドが失敗しました。が起きるのはなぜでしょうか

貼り付けコマンド直後にDoEventやると少し緩和されます
2021/12/05(日) 11:45:46.53ID:qeQQs+3u0
>>828
そのマクロの作者に聞いてください
うちで使ってるバーコードマクロだとそんな症状は出ないので
2021/12/05(日) 13:12:32.58ID:AJKte2/X0
>>828
バーコードフォントってのがあるから、そっち使ったほうがいいと思う
2021/12/05(日) 16:00:44.92ID:2zMPQ80f0
           |
            |  彡⌒ミ
           \ (´・ω・`)また髪の話してる
             (|   |)::::
              (γ /:::::::
               し \:::
                  \
832デフォルトの名無しさん (ワッチョイ 632f-0sOk)
垢版 |
2021/12/05(日) 16:26:53.62ID:njmkqf+T0
>>831
このハゲ!
2021/12/05(日) 17:47:50.87ID:VQoGm9OLd
バーコードフォント使う方法ってダウンロードしないとダメじゃね
現場でこそこそやってる俺はOLEオブジェクトだったか使う王道でやるしかなかったわ

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

俺も最初は随分と苦労したけど、
そうなったら最初から書き直したほうが絶対に早いし、腕も上がる
糞みたいなコードを読み直す時間は無駄
せっかく書いたのに・・・って思う気持ちは窓から投げ捨てろ
2021/12/10(金) 21:34:03.94ID:JOaKTDE2M
いやいや
失敗は成功の母
一度始めたことは苦しくても頑張れよ
出来の悪いコードを苦労して改良して動くようにしたとき、
人はレベルが一段上がる
2021/12/10(金) 21:53:28.84ID:RVt2OdWb0
一般的にデバッグはコーディングの10倍ぐらい経験や知識が必要な作業だから初心者には荷が重い
まずは最初から書き直してちゃんと動く物を作り上げた方がいいと思うよ
2021/12/10(金) 21:57:39.03ID:xjUFmHBZ0
書き直しって一からベタ打ちするんじゃなくてコピペがほとんどですよね?
2021/12/11(土) 00:08:42.46ID:0TmKxSpwM
それは、なにをするコードかにかかってる
2021/12/11(土) 00:13:00.70ID:8HGqQjXT0
誰でも最初はコピペから始めるもんだ
2021/12/11(土) 00:15:09.63ID:emzd9j2L0
거피&베!
2021/12/11(土) 00:15:37.34ID:8/VOYP4o0
>>838
その辺は慣れ。今からほしいコードが、「書く」「コピペ」、どっちが早いかによる。
ほとんどは自分でベタ書きだけど、個人的にこの辺はマクロの記録を修正するか、ネットからのコピペで済ます
・背景色や罫線を変更する時
・グラフをvbaで制御したい時
2021/12/11(土) 08:59:51.92ID:8HGqQjXT0
引数の意味がうろ覚えの時、ヘルプを読むより動くコードをコピペした方が早いことも
844デフォルトの名無しさん (アウアウキー Safb-ODP2)
垢版 |
2021/12/11(土) 10:04:25.41ID:U2WGKbTGa
早さじゃなく内容を優先しないから
つぎはぎだらけになるんじゃね
2021/12/11(土) 10:37:22.38ID:FFb1xkQN0
行き当たりばったりで建築開始しました
バランスが悪くなって一部倒壊しました

もう更地にして立て直した方がいい事もあるよね
2021/12/11(土) 10:40:37.38ID:8/VOYP4o0
>>>843
それはたまによくある
2021/12/11(土) 13:51:55.04ID:8HGqQjXT0
今は早さが最優先される時代だからね
民生アプリやゲームなんてバグだらけでもとにかくリリースして、オンラインでどんどんパッチを当ててく方式が主流になってる
848デフォルトの名無しさん (スッップ Sdff-sCeO)
垢版 |
2021/12/11(土) 15:19:06.66ID:yDTfTX/Yd
馬鹿が作って混乱を引き起こすのがVBAです
2021/12/11(土) 16:03:15.75ID:FFb1xkQN0
VBAテロか
2021/12/11(土) 17:49:58.93ID:XHSDYDCld
職場なんかで作ってたらろくなもんできないわ
VBAなんか普通はビール飲みながら自宅でつくるもんだ
そうしないと集中できないだろ
2021/12/11(土) 18:00:38.81ID:xLCFjTgsM
よっぽどじゃないと他人向けのマクロは作らない方がいいよなあ
独学だから、頼まれた機能を実現するために仕方なく作った時は気を使った
2021/12/11(土) 18:49:44.86ID:phdlt8Qf0
>>848
いや、VBAで作って混乱引き起こすような人はどの言語使っても混乱引き起こすよ。
理路整然と書く人はアセンブラでも綺麗なコードを書く。
2021/12/11(土) 18:53:20.61ID:PtEkn1n00
ジャンプ命令の後の命令が実行されてからジャンプするような意味不明な設計でそんなこと無理だ
2021/12/11(土) 19:01:24.21ID:FFb1xkQN0
PS2のデバッグで出会ったわそれ
Mipsだったかで
2021/12/11(土) 20:11:09.89ID:JZyyoC8MM
遅延スロット知ってる俺すげー君が現れた!
2021/12/11(土) 20:15:06.16ID:FFb1xkQN0
遅延スロットって言うのかあれ
知っててすごいね
857デフォルトの名無しさん (ワッチョイ e701-p36F)
垢版 |
2021/12/11(土) 20:26:38.51ID:EpvuxOsQ0
一気に形勢逆転。
2021/12/12(日) 12:00:32.32ID:fOYhEkbg0
数年前までVBAで結構組んでたんだけどちょっと必要があって使ってみたらセーブに10分くらいかかる
調べてみると
2021/12/12(日) 12:04:50.97ID:fOYhEkbg0
ごめんなさい途中でかきこんでしまいました
VBAのコードが長いとセーブに時間がかかるとあったのでモジュールを削除してみましたが変化なし
そこで新規にbookを作ってコピペでVBAのコード他すべての要素をコピペしたら普通にセーブできたのですが
これはどういった原因が考えられるでしょうか?
ちなみに別のPCで使ってみたら普通にセーブできました
2021/12/12(日) 13:09:25.29ID:ir+yquaT0
マクロ付きブックの保存なんて普通は1秒で終わる
10分なんてあきらかに異常だし、たとえ10秒でもおかしい
HDDの故障やウィルスをまず疑うレベル
2021/12/12(日) 13:16:29.89ID:fOYhEkbg0
そんなことは分かってるから質問してるんですが日本語読めてますか?w
2021/12/12(日) 13:52:38.61ID:Q+i1BsMe0
>>850
それな
で、職場で仕事がなくなる。なんだかよくわからん状態になる

>>859
ブックの中にゴミデータが溜まってる
・条件付き書式
・名前の定義
特に条件付き書式はコピペで増えるので要注意。vbaでコピペを繰り返すマクロを繰り返すうちに、恐ろしく重くなる事がたまによくある
2021/12/12(日) 14:16:03.78ID:fOYhEkbg0
>>862
なるほどそれで新規BOOKにコピペするとごみが消えるから軽くなるってことですね
ありがとうすっきりしました
2021/12/12(日) 18:58:52.97ID:xrQmO7Ym0
消えてほしいゴミはまだいるのにね
2021/12/12(日) 21:54:20.78ID:6bVn9kYk0
>>861
死ねよ
2021/12/12(日) 21:54:32.69ID:2LaGAq5q0
>>837
> 一般的にデバッグはコーディングの10倍ぐらい経験や知識が必要な作業だから初心者には荷が重い


ものすごい納得がいく。プログラムの力のかなりな部分を
設計力とデバッグ力が占めてる気がする。
2021/12/12(日) 21:59:03.19ID:2LaGAq5q0
>>865
あ。禁断のセリフが。

昔の2ちゃんで「氏ね」とか「市ね」とかわざわざ誤字にしてた
理由知らない世代なんだろうなあ…。
2021/12/12(日) 22:11:14.12ID:fOYhEkbg0
>>865
日本語まともに理解できないからしょうがないんだよなw
2021/12/12(日) 23:18:50.35ID:8ki8W4LJ0
超初心者です。
10個のブックで、それぞれのブックに同じ名前の4種類のシートがあり、
各シートのE10〜D12に入力されている値を抽出したいんですが、
1つのセルを指定するやり方しかわからず…

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

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

お前のほうが日本語理解できてないんじゃね?
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
2021/12/13(月) 22:01:16.80ID:r5ZevJAL0
もう解決したかもしれんが
保存にやたら時間がかかるエクセルファイルとは自分の経験だと
非表示にされたシートに画像が貼られまくってたって事があったなvba開いてみたらシートが異常に多くて気づいた
パソコンリテラシーない人はこういうファイルを平気でメールで送ろうとするよねw
2021/12/13(月) 22:22:28.96ID:WFQjB74Q0
知らんけどxlsm形式だと社内メールは送れんわうちじゃ
2021/12/13(月) 22:45:39.93ID:kcZqxtmKM
ボタンのあるシートを
ボタン削除しないままシート削除して
新たにシートを作るっていうコードにしてたら
無茶苦茶ゴミが溜まってファイルが肥大化した挙げ句、
最終的にボタンを貼り付けられなくなった
2021/12/14(火) 00:01:39.40ID:if1wU8ee0
>>873
リテラシー以前の問題で、何がどうなってるかさっぱりわからない
ただ、開くのに1分ぐらいかかるけどとりあえずは使えるのでつかて下さい、lという感じ
2021/12/14(火) 03:42:43.93ID:5RVk9rj00
>>873
その画像が沢山貼ってあるシートコピーして
VeryHiddenで隠して送りつけてやればいい。

やられたらやり返す
倍返しだ!!
2021/12/14(火) 17:45:50.47ID:24fsqNZFM
>>875
ボタン消えないのかよ怖いな
879デフォルトの名無しさん (ワッチョイ 7fda-ODP2)
垢版 |
2021/12/14(火) 18:25:23.35ID:xWxoPM4l0
ひとつに見えていても2つのボタンが重なっていることもあるぞ
2021/12/15(水) 21:10:32.00ID:L38lsqXF0
VBAのchengeイベントで

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

初心者じみた質問で申し訳ありません
2021/12/15(水) 21:18:56.86ID:LajuVBw/0
>>880
出来る
2021/12/15(水) 21:20:45.35ID:1EtKKquC0
>>880
数式でも良い?
2021/12/15(水) 21:24:32.70ID:L38lsqXF0
>>882
できればVBAでお願いします
わがままですいません
2021/12/15(水) 22:08:43.53ID:1EtKKquC0
>>883
そうか
>D1に12/3と日付が自動で出力され
この場合の、年がわからない
・常に1980年(デフォルト)
・常に「chengeイベント」のあった年
・今が12月なら来年
など
2021/12/16(木) 01:23:52.85ID:ZFKVIzjFM
日付と言ってるけど単に文字列で良さそうな感じ
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で日付判定したほうがよかったのだろうか
887デフォルトの名無しさん (ワッチョイ 7f8e-sCeO)
垢版 |
2021/12/16(木) 05:45:18.34ID:1S4Jwj7Q0
>>886
「できるでしょうか?」と聞かれているだけなのに引っ掛かる馬鹿
2021/12/16(木) 07:14:30.10ID:P8FnY0OCd
>>887
何か嫌なことがあったのか?
2021/12/16(木) 07:16:48.24ID:2N+hKbkuM
全く内容が同じ投稿を何度も目にしている気がする
その度に丁寧な回答を貰ってるけど
その処理流行ってるの?
2021/12/16(木) 07:34:41.45ID:B/UsaEnq0
>>887
大丈夫?

>>889
同じ内容を貼る人:
相手にしてもらえるので、同じ質問を貼り続ける
承認欲求が満たされない人間の末路

回答者:
腕が上がるので気にせずに回答すればオッケー
2021/12/16(木) 07:46:05.41ID:oEqQwjzjM
そっか

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

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

先にVB.Netの方が消えてしまいそうだ
2021/12/16(木) 22:01:35.50ID:z6vE3S6bd
>>900
DOS時代の古いアプリを移植して使ってるとこが意外とあるらしい
だから昔ながらの行番号なんかも使えるようになってる
2021/12/16(木) 22:40:48.14ID:mHaEbFg60
https://sugoikaizen.com/excel_list/vba-macro-01/
超初心者です。上のサイトを参考に非表示のシートを全表示にするようにしたいのですが、実際に使ってみるとアクティブシート?が切り替わって切り替わってチカチカしてしまいます。

その切り替わりのチカチカ、アクティブを切り替えないでシートを表示させることってできますか
2021/12/16(木) 23:12:56.50ID:gXiWyVoW0
application.screenupdating=false
処理
application.screenupdating=true
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欲しい」だろうな
2021/12/16(木) 23:54:07.68ID:yQf1medY0
>>901
VBできたのはWindowsになってからだな
DOSのときはMS-Cじゃね
2021/12/17(金) 00:50:02.02ID:6ayQmUSdM
行番号はDOS自体が登場する以前のROM BASIC全盛の頃の話
Microsoft BASICの独自拡張版を各メーカーが移植して搭載してた
FDD普及後も暫くはN88 BASICなどは生き残っていたけどDOS登場後は急速に廃れていった
2021/12/17(金) 01:11:17.61ID:mgcQuSa30
>>906
信長の野望はBASICで作ってあったな
2021/12/17(金) 07:15:41.68ID:yydeurUcd
>>905
DOS版のVB使っていたぞ
2021/12/17(金) 07:48:55.45ID:nHDcKfC1M
シートのデータを
文字コードutf-8、改行コードLFでファイルに書き出す方法教えてください
2021/12/17(金) 07:56:20.87ID:mgcQuSa30
>>908
うわ本当だ知らんかった、すまんす
2021/12/17(金) 08:43:20.41ID:Q9tRMs+C0
>>909
Excel単体では無理
アドインか、マクロか、外部ツールで変換か
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無しも使えるかも知れない
2021/12/17(金) 16:33:33.43ID:ggdkHu5b0
>>904
先日教えていただいた構文は間違いですか?
今、試したら自分のイメージに近い動作はするような感じです
後は自分で試行錯誤してみたいです

また質問してしまうかもしれませんが
自力でやってみます
2021/12/17(金) 20:46:33.62ID:XfO8F9WV0
空白でないセルの末尾に「様」という文字列を一括追加するマクロを教えてください
置換処理も組み込んで一括で処理したいのでマクロでやりたいです
出来ればコピペで使えるとありがたいです
環境はWin10でExcel2016です
よろしくお願いします
2021/12/17(金) 20:53:35.71ID:csKw8MZR0
置換も末尾に様を付けるのも関数式で行けるがオートフィルでぶわぁーっとやるんじゃアカンのか?
マクロでやっても処理内容的にはあまり変わらんぞ?
2021/12/17(金) 20:58:45.17ID:XfO8F9WV0
この先をずっと繰り返す作業なので、複数の置換と文字列付加を1つのマクロにまとめたいのです
917デフォルトの名無しさん (ワッチョイ be8e-qezp)
垢版 |
2021/12/17(金) 21:12:38.32ID:ptO1GC2n0
いつものあいつの釣りとあまりに馬鹿過ぎる質問はお断りです
また、Excelの使い方すらわからない人はお帰りください
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
2021/12/17(金) 22:44:20.69ID:/MGmp6un0
何回もマクロ動かして 山田様様 ってなってわけわからんようになる
2021/12/17(金) 22:48:52.62ID:V6YMPjTu0
>>919
まぁこれは直接書き換える案件じゃないんだよな
名前列 & (”様”|"御中")が良い

このやり方だと、最後が「様」で終わる名字があるとバグるんだよな。昔、「羽様」って顧客からクレームがあって「いいんですけどね・・・」って感じだった
まぁ、珍しい名前だしいいと思う
2021/12/17(金) 23:07:41.06ID:V6YMPjTu0
>>913
致命傷は一点

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

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

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

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

自己弁護でもないが、そのためにも関数やクラスは影響が最小限に済むように、短くまとめる必要がある
2021/12/17(金) 23:37:41.46ID:+tVxxheq0
>>920
> 昔、「羽様」って顧客から
岡山県赤磐市か奈良県生駒市かな?
2021/12/17(金) 23:55:47.33ID:V6YMPjTu0
>>922
東京か埼玉、もしくは神奈川。そもそも「羽様」様、以外にも最後が「様」になる名字はそれなりにいるぞ
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
925デフォルトの名無しさん (ワンミングク MMda-+zQR)
垢版 |
2021/12/18(土) 00:34:19.89ID:fI0CXnXAM
またいつものあいつに引っ掛かる馬鹿ども
926デフォルトの名無しさん (ワッチョイ 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")の部分を変えてくれ。
2021/12/18(土) 04:03:51.98ID:ghw9tbZ70
>>924
大変感謝します
早速ためして見ます!
2021/12/18(土) 09:44:05.03ID:jhUX4QL/0
>>914
文字列追加じゃなくて表示形式で対応したらどうだろ
セルの元データを書き換えるのはなんか嫌らしい感じがする

Selection.NumberFormatLocal = "@ ""様"""
2021/12/18(土) 09:58:59.51ID:KOqLJ1bdM
条件付き書式で様と御中を使い分けるとか
2021/12/18(土) 10:09:57.53ID:NazcNFuF0
条件付き書式は値に関与できたっけ?
2021/12/18(土) 10:20:06.80ID:MnOybqtX0
>>930
マイナス、0、プラス、文字列で分岐できる
どこかにそのフラグを持たせれば分岐できるが・・・それなら最初から様と御中書いたほうが早い
2021/12/18(土) 10:21:15.96ID:mp+R0tauM
>>931
基本は様でフラグ立てたところだけ御中とか
2021/12/18(土) 10:29:07.67ID:bbhq+5c10
つーか普通敬称つけるのは印刷するときだけじゃね
エクセルのデータに組み込む必要ないような
934デフォルトの名無しさん (ワッチョイ a301-izju)
垢版 |
2021/12/18(土) 10:30:58.78ID:S/VVluSn0
量子の世界では1未満は確率的に存在するんだよ。
2021/12/18(土) 10:47:16.76ID:S7ay6emt0
王さんに様付けると王様だな
2021/12/18(土) 13:06:35.91ID:SgR4ReUM0
>>935
イカに様付けるとイカサマだな
楽しいのか?
2021/12/18(土) 13:09:17.63ID:SgR4ReUM0
>>934
量子の世界でも1か0しかないだろ
2021/12/18(土) 13:11:12.98ID:SgR4ReUM0
銀行の「行」を消して「御中」に直してた画像あったな
939デフォルトの名無しさん (ワッチョイ a301-izju)
垢版 |
2021/12/18(土) 14:28:51.14ID:S/VVluSn0
だいえーだいえーいえぃいえぃいえぃいえぃ。
だいえーとってもいえぃいえぃいえぃいえぃ。
↓続き。
2021/12/18(土) 14:43:23.05ID:yfxR8FS90
>空白でないセルの末尾に「様」という文字列を一括追加
これ、今「様」がついてたらつけるなっていう要件じゃないんじゃね
そうじゃないなら、羽様が、羽さん様なのか羽様さんなのか区別できるデータじゃないと不可能だぜ

普通に考えて名称と敬称と分けてもつだろ
2021/12/18(土) 15:31:29.53ID:XqEkP9jw0
おじいさん、もうその話終わってますよ
2021/12/18(土) 17:00:19.27ID:T6quYshAM
5chはおじいさんの巣窟ですよ。
子供は他所で遊んだ方が良いですよ。
2021/12/18(土) 17:14:29.79ID:nevTsbMb0
>>938
直せてねえ…
944デフォルトの名無しさん (ワッチョイ a301-izju)
垢版 |
2021/12/18(土) 19:06:22.48ID:S/VVluSn0
もしかしてお前らダイエー知らないの?
2021/12/18(土) 19:52:58.88ID:S7ay6emt0
野球の漫画だっけ
946デフォルトの名無しさん (ワッチョイ a301-izju)
垢版 |
2021/12/18(土) 20:24:25.92ID:S/VVluSn0
それはダイエーじゃなくて地獄甲子園。
2021/12/18(土) 21:06:03.74ID:XqEkP9jw0
もう25年前に近くのダイエーなくなってダイクマになった(もうそれもなくなってマンションになってるけど)
一駅先にグルメシティの形で残ってるけどほとんど行かない
948デフォルトの名無しさん (ワッチョイ a301-izju)
垢版 |
2021/12/18(土) 21:30:26.72ID:S/VVluSn0
ヒントもう無いの?
949デフォルトの名無しさん (ワッチョイ a301-izju)
垢版 |
2021/12/18(土) 21:39:28.14ID:S/VVluSn0
ここまでの情報で、神奈川県秦野市ではないか?と自作AIがはじき出しましたが。
あってる?
2021/12/18(土) 21:44:58.76ID:XqEkP9jw0
>>949
合ってる
ダイクマ発祥の地なのでAIなら楽勝かとw
951デフォルトの名無しさん (ワッチョイ a301-izju)
垢版 |
2021/12/18(土) 21:45:33.86ID:S/VVluSn0
おおおお!!
あってた!!
2021/12/18(土) 21:47:56.30ID:ruUAvqsCd
神奈川県秦野市の東海大学前のグルメシティは、元は忠実屋というスーパーだった
ダイエーに買収された後グルメシティに変わった
ステッカーの下には今でも忠実屋のロゴマークが残ってる
店の床に小さい段差があるのは増築した痕跡
2021/12/19(日) 00:46:13.19ID:1w97E/wVM
ほんとおまいら、昔話が大好物だな
2021/12/19(日) 01:41:02.09ID:SLVervUs0
ジジイしかいないスレ
VBAなんていまだにやってるのは、ジジイくらいしかいないか
2021/12/19(日) 01:45:35.49ID:F1jZtUeQ0
二十歳こえたらみんなジジイだよ
956デフォルトの名無しさん (アウアウキー Safb-fxsa)
垢版 |
2021/12/19(日) 02:09:49.49ID:WKKxXwhHa
左様でござるか
2021/12/19(日) 05:36:03.45ID:9cYlynLW0
ダイクマって
あの「ダイナミックダイクマ〜!!」の
ダイクマ?
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

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

今までご親切にお教えいただいた構文を生かしてなく申し訳ありません。
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
>
> ここで色々お教えいただきそれらの構文を自分なりに組み合わせてみたのですが
> 初心者の私にはレベルが高すぎるようで・・・
>
> 今までご親切にお教えいただいた構文を生かしてなく申し訳ありません。
2021/12/19(日) 07:03:44.45ID:LtRjW0Zk0
間違えがありましたので連続投稿になってしまいましたが
ご教授ください
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
> >
> > ここで色々お教えいただきそれらの構文を自分なりに組み合わせてみたのですが
> > 初心者の私にはレベルが高すぎるようで・・・
> >
> > 今までご親切にお教えいただいた構文を生かしてなく申し訳ありません。
2021/12/19(日) 07:05:30.07ID:LtRjW0Zk0
hの位置がずれていました
朝から連続投稿すいません!
2021/12/19(日) 07:40:00.27ID:F1jZtUeQ0
必要な仕様が足りない
・B2よりB1が大きい場合は動作しない?それとも翌月のその日までを記載?
・B1,B2に入力された数値が日付として有り得ない場合はどうする?動作しないだけでよいのか?
・年の判定はどうする?現在の年を使用してよいのか?
2021/12/19(日) 08:34:48.49ID:J5v8c1sd0
>>958前スレで見た

https://mevius.5ch.net/test/read.cgi/tech/1626565335/782-
2021/12/19(日) 08:38:14.07ID:J5v8c1sd0
最初は782で結局やりたい事は
https://mevius.5ch.net/test/read.cgi/tech/1626565335/829
これだったと
2021/12/19(日) 15:48:07.81ID:LtRjW0Zk0
>>963
> 必要な仕様が足りない
失礼しました
> ・B2よりB1が大きい場合は動作しない?それとも翌月のその日までを記載?
B1の方が大きければ空白になってくれればいいのですが
エラー表示がセルに表示されてもエラーはエクセルの設定で空白にできるので大丈夫かと思っています

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

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

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

説明下手ですいません (汗 
2021/12/19(日) 17:22:51.01ID:6V5J9+AZ0
Dim a(10,20)
a(1,2)=3

上で2行目の1や2の数字のことを何て言うのでしょうか
初歩の質問で申し訳ありません。
2021/12/19(日) 17:50:26.31ID:XeEcFWJL0
ひきすう?
2021/12/19(日) 17:53:41.03ID:KHFMKFNKM
>>967
添え字かな
2021/12/19(日) 18:27:21.36ID:pq+sPc2G0
あるソフトウェアが出力する
ログファイル(テキストファイルで行数は不定)をスペース区切りで文字列として読み込むコードを書いているのですが
ログファイルの先頭行のスペースの数が一定ではなく
単純に読み込むと先頭の数値が
A列目に入ったりB列目、C列目に入ったりして困っております

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

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

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

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

先頭(左端)に連続して入っているスペースを無視する方法しか
無いかもしれません
2021/12/19(日) 18:56:32.68ID:RC6G9Zkh0
何をしたいのかよくわからんけどちゃちゃっとやるなら正規表現使え
https://codezine.jp/article/detail/1655
973デフォルトの名無しさん (ワッチョイ be8e-qezp)
垢版 |
2021/12/19(日) 19:02:03.97ID:oG6IuvVy0
ルビー基地外だぞ
2021/12/19(日) 19:04:40.91ID:9cYlynLW0
>>971
LTrimでググれ
975デフォルトの名無しさん (ワッチョイ dabd-6dU9)
垢版 |
2021/12/19(日) 19:08:52.05ID:pq+sPc2G0
連続レス申し訳ありません

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

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

といったものになると思います
何卒ご助力お願い致します
2021/12/19(日) 19:46:59.93ID:sZ+QwmZV0
>>975
それって固定長じゃないの?
全銀データみたいな奴
固定長なら、文字数数えて、データ区切り使ったほうが早いと思う
977デフォルトの名無しさん (ワッチョイ dabd-6dU9)
垢版 |
2021/12/19(日) 20:17:13.17ID:pq+sPc2G0
皆様ご回答ありがとうございます

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

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

>>976
ありがとうございます
途中でエラーメッセージ行とかが
入るので全ての行が固定長
と言うわけではないのですが
データを処理したい行は固定長に近いです
問題は処理したい行の先頭に0〜3個のスペースが入ることです
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
-----------------------------
2021/12/19(日) 20:40:17.69ID:6V5J9+AZ0
>>968-969
ご回答ありがとうございました
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
981デフォルトの名無しさん (ワッチョイ 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
のように入力可能でしょうか?
2021/12/19(日) 21:13:00.94ID:LtRjW0Zk0
>>980
わかりづらい説明にご親切にありがとうございます
感謝!
今から試したいと思います!
2021/12/19(日) 21:22:20.20ID:o7hmg8oNM
>>981
そんなもんマクロの記録で連続する区切り文字は1文字として扱うオプション使えばいいでしょ
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 は、文字列の先頭・末尾から、連続した空白類を除去する
2021/12/19(日) 21:42:45.37ID:tlLDAcl00
今時、rubyとか使ってんじゃねーよ
2021/12/19(日) 21:51:18.70ID:LtRjW0Zk0
>>980
すみません
今試してみました
C列には期間の日が表示され
D列には機関の月日が表示され

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

私にはなにをどうしたらいいのかまったくわかりませんでした
技術的にむずかしいでしょうか?
ググってみましたが出来そうにないです
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
2021/12/19(日) 23:20:35.00ID:2A/aI1dD0
>>981
これで代入できる
Range("A1:D1") = Split(str, " ")
989デフォルトの名無しさん (ワッチョイ be8e-qezp)
垢版 |
2021/12/19(日) 23:23:16.74ID:oG6IuvVy0
相変わらずRuby基地外に引っ掛かる馬鹿ども
990デフォルトの名無しさん (ワッチョイ 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

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

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

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

出力列を増やすのはのは対して手間は変わらないから自分でアレンジして
分からないならもっと基礎の部分を勉強するか諦めて関数式書いた方が早いよ
2021/12/20(月) 01:41:34.12ID:jnlr9GaR0
次スレ
Excel VBA 質問スレ Part74
https://mevius.5ch.net/test/read.cgi/tech/1639932059/
2021/12/20(月) 07:39:37.83ID:sc4Jjnxw0
>>996
2021/12/20(月) 10:40:58.57ID:2126b9QK0
>>995
前スレ見たらわかるけどそいつ後出し後出しで
しかも前スレで得た知識も抜きで再質問してる

https://mevius.5ch.net/test/read.cgi/tech/1626565335/782,829

>>996
乙!
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を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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