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


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

Excel VBA 質問スレ Part73



1 名前:デフォルトの名無しさん [2021/09/13(月) 07:29:59.47 ID:GNx0xRRz0.net]
!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

2 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 08:13:09.52 ID:tEaVHPxwM.net]
>>1

3 名前:デフォルトの名無しさん [2021/09/13(月) 19:11:08.29 ID:Pa7+I2w50.net]
いつものあいつの釣りとあまりに馬鹿過ぎる質問はお断りです
また、Excelの使い方すらわからない人はお帰りください

4 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 21:24:22.31 ID:dfMVUW3H0.net]
それでも来たらスルーでいいんじゃね

5 名前:デフォルトの名無しさん mailto:sage [2021/09/14(火) 16:24:06.98 ID:QWQM37es0.net]
A列の全行のセルの値を配列に突っ込む時、オートフィルターが複数列でかかっていると、
表示されてるやつだけ配列に入ってしまうの、なんとかならない?

配列をA列に縦方向に貼り付ける時も、オートフィルターが既にかかってると、適切に元の行に貼り付け戻せない。
仕様なのかな

6 名前:5 mailto:sage [2021/09/14(火) 16:26:32.34 ID:QWQM37es0.net]
2万行あるから、なるべく最初にa列の内容を全部配列に入れてから、それぞれを操作して、
それからまた修正済みの配列の中身をa列に上書き貼り付けしたい。
でも、オートフィルターがかかっているとまずい。
複数列でオートフィルターがかかっているととても難しい

7 名前:デフォルトの名無しさん mailto:sage [2021/09/14(火) 16:40:04.06 ID:dOl/0XMua.net]
フィルタ全解除する処理を前に置けばいいじゃない

8 名前:5 mailto:sage [2021/09/14(火) 17:37:49.57 ID:QWQM37es0.net]
全解除して処理を行う、というのはできたけど、ユーザーのためにフィルタした状態ってのはそのままに戻したい。
フィルタしてる列が単体ならなんとかそれはできた。
だけど、複数列でフィルタした状態を、いったん全解除して、そんであとでまた元のフィルタ選択状態に戻すのが出来なさそうなのよね。

9 名前:デフォルトの名無しさん mailto:sage [2021/09/14(火) 19:45:59.21 ID:dPBji9ks0.net]
テーブルの見出しはvalueじゃ取り出せないんだな
勉強になったわ

10 名前:デフォルトの名無しさん [2021/09/14(火) 20:24:42.51 ID:Tksl7xa90.net]
フィルタは全解除するのが一番手っ取り早い
横に伸ばすのは異常に難易度高い



11 名前:デフォルトの名無しさん [2021/09/14(火) 20:25:17.71 ID:Tksl7xa90.net]
列の増加が多いなら最初から大量にフィルタ列を用意シておいたほうが良い

12 名前:デフォルトの名無しさん mailto:sage [2021/09/14(火) 21:12:31.57 ID:u7isybhPa.net]
>>8
フィルタの条件って色々指定できる(色とか日付とか特定の文字列を含むとか)から、全部に対応しようとするとすごくめんどくさい
https://excel-ubara.com/vba_class/VBA_CLASS_08.html

割り切りとして「このマクロを使ったらフィルタは解除されますが情報は最新化されます」くらいにしとくのが無難かと

13 名前:デフォルトの名無しさん mailto:sage [2021/09/14(火) 21:57:16.30 ID:zgsbOTDxH.net]
作業シートにコピペしてから処理すれば?

14 名前:デフォルトの名無しさん mailto:sage [2021/09/14(火) 23:44:27.27 ID:UJ1BwW9y0.net]
コマンドボタンを押してユーザーフォームを開くときに、
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

15 名前:デフォルトの名無しさん mailto:sage [2021/09/14(火) 23:56:12.55 ID:OBquwEh60.net]
>>14
UserForm top left でググッたらこんなページがhttps://www.officepro.jp/excelvbaform/form_form/index4.html
検証してないけど試してみたらどうですかね

16 名前:デフォルトの名無しさん [2021/09/15(水) 00:23:15.17 ID:8Tg1g6H40.net]
>>15
UserForm top left セルの位置 でググったら
完璧なTipsがありました!
検索のヒントをありがとうございました!

17 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 00:48:53.61 ID:YsJqQLCb0.net]
どーでも良い質問なんだが、VBAからエクセルのセルに値を入れるときの表現について
意見が割れてるので、みんながどー表現してるか知りたい

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

仕様書で人によって同じことしてるのに出力となってたり入力となってたりで色々バラバラすぎる

18 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 01:03:00.63 ID:gZeM1+Z6d.net]
>>17
VBAで計算や処理した結果をワークシートに保存するだけ、セルに値を入れて終わりの場合は出力
シートに値をセットしたあと、さらにその値を使って数式やグラフなどで別の処理や加工をする場合は入力

19 名前:デフォルトの名無しさん [2021/09/15(水) 07:18:17.38 ID:zmLKkAKu0.net]
>>17
それは一律で入力じゃないのか
代入って言うぐらいだし

「出力」はエクセルがrangeのvalueを出力してるだけでは?

20 名前:デフォルトの名無しさん [2021/09/15(水) 07:51:35.00 ID:qRxK7g6Y0.net]
VBAの関数、メソッドとしてそのデータが入力値なのか出力値なのかは明白なのでは?



21 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 10:54:35.14 ID:LR7HEnPp0.net]
>>17
VBAがセルに出力
ユーザーがセルに入力

22 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 12:02:19.64 ID:K+waubxMM.net]
お知恵をお貸し下さい

String型の変数に文章を代入しています
その変数が「は」を助詞として使用しているかを検出し、その「は」が何文字目に記載されているかを抽出したいです
判定式はどの様に組むのが良いでしょうか

23 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 12:16:58.05 ID:ggl3y/Wm0.net]
>>22
これが使えるんじゃないかな。
https://qiita.com/mima_ita/items/bc2aeb060ee12d280d7b

24 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 12:26:39.15 ID:ggl3y/Wm0.net]
こちらの下の方に具体的に品詞の判定方法がある。
www.excel.studio-kazu.jp/kw/20201108202429.html

25 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 14:02:58.42 ID:XT7xZlnV0.net]
是非とも
「はははははは、ははのはははははははと笑う」で
挙動確認を行なって欲しい案件だな

26 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 16:06:38.48 ID:5d7y3fL1M.net]
>>17
> A1セルに 123 を出力するという表現を使うか、A1セルに 123 を入力するという表現を使うか、どっち?
俺なら「A1セルに 123 を書き込む」かな
シートはストレージみたいなものなのと思ってるので出力とか入力って言うのはなんか違和感ある

27 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 16:59:13.14 ID:3TKYe9Fz0.net]
VBA側を主体に書いているなら(シートに)出力
シート側を主体にかいてるなら(VBAから)入力
だな

VBAの仕様書でVBA側を主体にしないのはどうかと思うが
(マクロ付き)エクセルの仕様書だと考えればまあ入力でもいいのかも

28 名前:デフォルトの名無しさん [2021/09/15(水) 23:30:54.86 ID:IO2bkDAL0.net]
985なのですが、
ttps://whois.nic.ad.jp/cgi-bin/whois_gw?key=182.22.16.251
から
b. [ネットワーク名] YAHOO-NET
をVBAで抽出するいい方法はあるでしょうか?

29 名前:デフォルトの名無しさん mailto:sage [2021/09/16(木) 00:13:25.85 ID:/erdykE4H.net]
>>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

30 名前:デフォルトの名無しさん mailto:sage [2021/09/16(木) 00:59:42.68 ID:5Hx4RpZ/0.net]
一生使うことのなさそうなCreateObjectだな



31 名前:デフォルトの名無しさん mailto:sage [2021/09/16(木) 01:49:26.07 ID:tvb8xhvB0.net]
>>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

32 名前:デフォルトの名無しさん mailto:sage [2021/09/16(木) 01:51:47.59 ID:YFUf0QLVM.net]
なぜRuby

33 名前:デフォルトの名無しさん mailto:sage [2021/09/16(木) 02:01:13.02 ID:FMosLWBbd.net]
スレタイも質問も読めないRubyバカ

34 名前:デフォルトの名無しさん [2021/09/16(木) 06:38:12.58 ID:COWrCKXD0.net]
利用者数激減の言語
それがruby

35 名前:デフォルトの名無しさん mailto:sage [2021/09/16(木) 08:25:21.24 ID:J7QCCEb9M.net]
>>32-34
相手すんなよ…

36 名前:デフォルトの名無しさん mailto:sage [2021/09/16(木) 08:25:49.50 ID:3isIfw030.net]
>>17
なるほど仕様書の問題か
ならば現場内で紛らわしくないような記載のルールを作ればいいかな。
例えばユーザーが手打ちで設定する場合は「入力」
VBAで書き込む場合は「出力」または「設定」

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

そういう時は大まかな流れ図みたいなもの書いて添付して紛らわしさを回避するのも一つの手だよ。

37 名前:デフォルトの名無しさん mailto:sage [2021/09/16(木) 11:33:48.95 ID:0wHWe9CF0.net]
質問への回答ありがとう
>>17の質問者です

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

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

日本語は改めて考えると主体が曖昧で難しい…

38 名前:デフォルトの名無しさん mailto:sage [2021/09/16(木) 12:13:09.55 ID:/erdykE4H.net]
>>37
日本語の文章ってのは、主語が存在しなくても成立する性質があるんだよ
おかげでどっち視点かわからなくなる現象が起きやすい

逆に英文法では主語がほぼ省略できない
だから単語を置き換えただけの翻訳は不自然な文章になる

39 名前:デフォルトの名無しさん mailto:sage [2021/09/16(木) 13:11:41.46 ID:3+DQoJa1a.net]
グッジョブ!俺

40 名前:デフォルトの名無しさん [2021/09/16(木) 14:54:30.21 ID:QuckXkbq0.net]
>>38
馬鹿の典型例



41 名前:デフォルトの名無しさん [2021/09/16(木) 17:31:50.83 ID:Z23LNYuB0.net]
質問させてください。

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

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

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

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

よろしくお願い申し上げます。

42 名前:デフォルトの名無しさん mailto:sage [2021/09/16(木) 17:42:26.31 ID:3abSZdzaM.net]
俺が馬鹿なだけかもしれねぇけど何をしたいのかがさっぱり分からない

43 名前:デフォルトの名無しさん mailto:sage [2021/09/16(木) 18:02:43.18 ID:nCqRUFyPM.net]
スクレイピングしたいんだろ
そのデータをどう扱うかによるわな

44 名前:デフォルトの名無しさん mailto:sage [2021/09/16(木) 18:31:48.90 ID:sOgFGA/J0.net]
というかMAC版のEXCELってVBA使えるの?
あとスクレイピング用のコンポーネントも

45 名前:デフォルトの名無しさん [2021/09/16(木) 18:41:42.01 ID:EvK5hxPzM.net]
他のツールでデータを集めて
結果をExcelにするのが良いよ
csvでもいいんじゃね?

46 名前:デフォルトの名無しさん mailto:sage [2021/09/16(木) 19:07:04.50 ID:Az+Wn1Ze0.net]
>>41
htmlから簡単なスクレイピングならPower Queryがとっつきやすいかと。
URLのリンク先がcsvやExcelファイル、pdfファイル、
GitHubにあるJSONなんかもこれで結構いける。

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

その先の処理でVBAを組み合わせることはある。
クエリーエラーを避けるため、一つずつシーケンシャルに更新させたいとか、
同時にファイルをDLして保存したいとか。

47 名前:デフォルトの名無しさん [2021/09/16(木) 19:33:58.44 ID:COWrCKXD0.net]
>>41
chrome 拡張機能 スクレイピング
で検索すると良い
ちなみにyahooなんかはスクレイピング対策として、短時間で大量にアクセスすると一発で垢一時停止になるぞ

一番いいのはyahoo APIなどのAPIを使う事

48 名前:デフォルトの名無しさん mailto:sage [2021/09/16(木) 20:21:31.16 ID:3isIfw030.net]
MacのOfficeソフトとRubyには期待するなって
死んだばあちゃんが言ってた

49 名前:デフォルトの名無しさん [2021/09/16(木) 20:24:24.60 ID:MqGeVsp10.net]
Macには無料で今流行りのPythonがついているそうなので
スクレイピンクはそっちの方が遥かに簡単じゃないかな
ExcelVBA経験がないのなら

50 名前:デフォルトの名無しさん mailto:sage [2021/09/16(木) 20:45:30.18 ID:B6OYbZSR0.net]
>>48
ばあちゃんハイカラやな



51 名前:デフォルトの名無しさん mailto:sage [2021/09/17(金) 03:52:03.83 ID:O1PoA15N0.net]
Rubyist は、たいていMac

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

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

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

YouTube API とか、Google Maps API とか、
株式相場などもそう

52 名前:デフォルトの名無しさん mailto:sage [2021/09/17(金) 11:36:45.56 ID:D2cYhIKk0.net]
>>41
なんでできもしないことやろうとすんのかね
検索してもわからないんじゃ無理だろ

53 名前:デフォルトの名無しさん mailto:sage [2021/09/17(金) 12:01:52.56 ID:Y3MPn8p/0.net]
できないことをやらないと
いつまでたっても何もできないのだが、、、

54 名前:デフォルトの名無しさん [2021/09/17(金) 18:44:11.62 ID:xtR/7aZz0.net]
>>29, 31
ありがとうございました。

55 名前:デフォルトの名無しさん mailto:sage [2021/09/17(金) 20:27:29.50 ID:ZtM+Yv2y0.net]
見えないものを見ようとして望遠鏡を覗き込んだら捕まった事例

56 名前:デフォルトの名無しさん [2021/09/17(金) 20:40:10.73 ID:7ovEcO6ia.net]
>>53
おまえが出来ないのは自業自得

57 名前:デフォルトの名無しさん mailto:sage [2021/09/17(金) 22:49:29.45 ID:DaER+3fZ0.net]
前の定義で移動できるセルを登録したいのですが、アプリケーションの定義エラーがでます。
範囲は101カ所登録したいのですが、

58 名前:どうやら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,"
[]
[ここ壊れてます]

59 名前:57 mailto:sage [2021/09/17(金) 22:50:14.26 ID:DaER+3fZ0.net]
続き
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,"

60 名前:デフォルトの名無しさん [2021/09/17(金) 22:50:45.98 ID:DaER+3fZ0.net]
続き
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



61 名前:デフォルトの名無しさん [2021/09/17(金) 23:08:43.51 ID:VKkEr3i80.net]
255文字

62 名前:デフォルトの名無しさん mailto:sage [2021/09/17(金) 23:31:47.79 ID:4pHWHBC6H.net]
>>57
1274文字まで
質問のために加工したんでなければ、その範囲はもっとシンプルにまとめられるぞ
"=$H$3:$K$3,$N$3:$O$3,$R$3:$S$3,$E$6:$CQ$12,$CV$6:$FH$12"

63 名前:57 mailto:sage [2021/09/18(土) 09:25:55.38 ID:85XqBE5T0.net]
>>61
ありがとうございます。シート名を削除したら動きました

64 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 09:39:13.68 ID:iFpkyoTBa.net]
>>62
横から失礼
RangeはUnionにすると実質文字制限がなくなる

65 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 10:16:04.89 ID:jMbZYEP4H.net]
>>63
引数はRangeじゃなくてStringなんよ

66 名前:デフォルトの名無しさん [2021/09/18(土) 12:10:53.45 ID:vNZ9H73d0.net]
名前定義ってRangeオブジェクトからでもできるのか 知らなかった
Range("B1:G10").Name = "Nyuuryoku2"

67 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 12:26:09.80 ID:FfOi19ZE0.net]
便利だけどExcelの名前の定義ウインドウは使いにくすぎる

68 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 12:26:47.71 ID:FfOi19ZE0.net]
つまりたくさん定義すると管理しにくいんだよな

69 名前:デフォルトの名無しさん [2021/09/18(土) 16:41:01.37 ID:vNZ9H73d0.net]
名前の管理を簡単にする便利なアドインって誰か作ってないの?
(とおねだり)

70 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 18:23:53.93 ID:B91oASHcM.net]
簡単の意味を定義してくれれば俺が作ってやるよ。



71 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 18:33:26.51 ID:y+KnaSW50.net]
表形式ならテーブルでOK
名前の定義使わなくても

72 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 18:45:25.50 ID:+/kaLHzEM.net]
>>69
俺が思った通りに名前を定義してくれて、不要な名前は勝手に知らない間に削除してくれるとかかな
当然 >>57-59>>61 程度の変換は自動でやる

73 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 18:49:07.44 ID:FfOi19ZE0.net]
ちょっとぐぐったけど
NamesコレクションをForEachで回してユーザーフォームにでも表示させれば作れそうだな

74 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 00:12:03.29 ID:zQBxj3q40.net]
>>71
めちゃくちゃ簡単だな。任せとけ。

75 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 05:13:48.14 ID:AGA6cOjvM.net]
おう、頼んだぞ

76 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 10:09:24.37 ID:IfToBfi40.net]
Internet Explorer_Serverのハンドルから取得したIHTMLDocumentオブジェクトではそのページ内での操作はできましたが
Navigate実行時にメソッドをサポートしていないというエラーになります
別のURLへ移動する方法ありますか?

77 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 12:24:27.96 ID:jno0wMDOH.net]
>>75
たぶんメソッドの使い方が間違ってる
デバッグしてやるからコード晒してみ

78 名前:デフォルトの名無しさん [2021/09/19(日) 12:45:26.42 ID:/yxUr6Cya.net]
IEのオプションでcssの設定を変える

79 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 14:05:15.93 ID:IfToBfi40.net]
>>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

80 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 14:06:52.91 ID:IfToBfi40.net]
続き
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



81 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 14:13:18.62 ID:qcTxghfBM.net]
gethtmldocumentにnavigateあるのか?

82 名前:デフォルトの名無しさん [2021/09/19(日) 21:14:40.95 ID:+Er1+t3H0.net]
navigateじゃなくてcreateDocumentFromUrlじゃないの?
知らんけど

83 名前:デフォルトの名無しさん [2021/09/20(月) 00:12:39.27 ID:wP8fgZ+m0.net]
A1からA10000にデータが有って検索したい文字列があったとする。
この場合,範囲をdictionaryで調べるのと配列で調べるのは速度は同じぐらい??

84 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 00:16:46.79 ID:GQS+gMma0.net]
なぜ自分で試さないのか

85 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 02:45:51.50 ID:KDTpyD+cH.net]
>>82
データがセルに入ってるならワークシート関数使った方が速い

86 名前:デフォルトの名無しさん [2021/09/20(月) 10:43:06.46 ID:wP8fgZ+m0.net]
えっ?そうなの??

87 名前:デフォルトの名無しさん [2021/09/20(月) 10:44:41.60 ID:wP8fgZ+m0.net]
試しましたが、
コードはdictionaryのほうがすっきりした。
体感速度はあまり変わりませんでした。

88 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 10:54:05.02 ID:9E+2eMtE0.net]
かまってちゃんかよ
天気いいから散歩でもしてこいよ

89 名前:デフォルトの名無しさん [2021/09/20(月) 11:55:16.12 ID:djFT0hLf0.net]
コード醸せよ

90 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 12:03:32.94 ID:DYg0tonqd.net]
A・オリゼー



91 名前:デフォルトの名無しさん [2021/09/20(月) 12:27:59.43 ID:lHEjG93V0.net]
xxとyyどっちが早い、というのは本当に試した方が早い
バージョンアップで最適化されて、すげー早くなってる事がある

92 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 12:51:40.86 ID:3QXihmxB0.net]
>>87
別にかまってちゃんじゃなくて、回答に信頼性がないから自分で試したんだろう。誰かが信頼できそうな回答をくれたんだったら試さないと思うぞ。

93 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 13:12:45.31 ID:26+LHXKYM.net]
ちゃんと結果まで書き込んでるんだから
質問だけしていなくなるやつもいる中で、優秀だと思うよ

94 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 15:29:06.41 ID:Ijs9yUmJM.net]
>>86
まずはありがとうございました、だろ
うぜー帰れ

95 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 15:32:05.91 ID:3QXihmxB0.net]
>>93
お前何代表者みたいな顔して怒ってんだよ、とチャチャを入れてみる(笑)

96 名前:デフォルトの名無しさん [2021/09/20(月) 16:38:36.67 ID:my+lQwjla.net]
イヤ
マジで>>86はウザいわ
2度と来るな

97 名前:デフォルトの名無しさん [2021/09/20(月) 16:58:36.07 ID:djFT0hLf0.net]
スルー力がない奴もセットて消えろ

98 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 17:03:04.82 ID:3QXihmxB0.net]
>>96
お前もスルーしないと

99 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 17:07:29.03 ID:FEM4xU2r0.net]
子供か

100 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 17:16:52.36 ID:3QXihmxB0.net]
>>98
スルー力、言うのは易し、行うのは難し、を指摘しているだけ。

もう一ついいか?
人の振りして我が振り直せ(笑)



101 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 17:48:58.56 ID:9E+2eMtE0.net]
一番スルーしてない人が言うと説得力ある!

102 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 18:05:45.62 ID:Mz1RekPdr.net]
モジュールとボタンを別のブックにコピーしたくてできたと思ったんだけど
ボタンに登録されるマクロがコピー元のマクロになっちゃってとうすりゃええのか分からん
.OnAction=Thisbook&”マクロ名”とかじゃ動かないのね

103 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 18:30:41.29 ID:aa1o0gq5a.net]
それコピーじゃなくてインポートしろよ

104 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 18:40:40.67 ID:FEM4xU2r0.net]
>>99
寂しいのか?

105 名前:デフォルトの名無しさん [2021/09/20(月) 21:44:55.52 ID:djFT0hLf0.net]
ボタンをインポート?
これも楽な方法があったらいいのにね

106 名前:デフォルトの名無しさん [2021/09/20(月) 21:51:19.19 ID:lHEjG93V0.net]
シート上のフォームコントロールを消す時って
・右クリックで選択
・コンテキストメニューをESCで消す
・切り取り、もしくは「deleteキー」
で合ってますか?

選択する時はF5キーのオブジェクトでもいいんですけど、
どちらにしろ右クリックで選択というのが何か気持ち悪い

107 名前:デフォルトの名無しさん [2021/09/20(月) 21:58:02.93 ID:lHEjG93V0.net]
>>101
sheetモジュールのマクロ?
それとも標準モジュールのマクロ?

どちらによるかでやり方が変わる

108 名前:デフォルトの名無しさん [2021/09/20(月) 21:58:44.81 ID:djFT0hLf0.net]
Ctrl+クリック
Delete
でいいんじゃない

109 名前:デフォルトの名無しさん [2021/09/20(月) 22:10:20.73 ID:lHEjG93V0.net]
>>107
短縮できました、ありがとうございました

110 名前:デフォルトの名無しさん mailto:sage [2021/09/21(火) 16:59:19.72 ID:6V+SG26ea.net]
private subのどのプロシージャーからでも、グローバル変数に入った値を取り出す方法として、

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

public dim grobal_a as string

sub hoge
global_a = "aaaa"
end sub


とやっておき、

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

ってやるの、普通?



111 名前:デフォルトの名無しさん mailto:sage [2021/09/21(火) 18:19:02.19 ID:Qqw1uu/Y0.net]
>>106
標準モジュールのマクロですー…

112 名前:デフォルトの名無しさん mailto:sage [2021/09/21(火) 19:19:53.65 ID:Bwxe0pHra.net]
>>110
シートに標準モジュールのやつを呼び出すSubを書いて、それをボタンから呼び出せばいい

113 名前:デフォルトの名無しさん mailto:sage [2021/09/21(火) 20:47:40.27 ID:bgKjXBpU0.net]
>>109
まず変数のスコープ覚えようね

114 名前:デフォルトの名無しさん mailto:sage [2021/09/21(火) 21:06:44.82 ID:0m2xZsmF0.net]
>>109
普通は grobal_a と global_a の二つを一つにまとめると思う

115 名前:デフォルトの名無しさん [2021/09/21(火) 21:13:59.43 ID:pV6hI0Vx0.net]
>>110
全シートを選択してカットペーストでいけるだろ、と思ったら無理だった

VBEをVBAで動かすしか無いと思う。
https://jizilog.com/vba-modadd
officetanaka.net/excel/vba/vbe/07.htm

116 名前:デフォルトの名無しさん [2021/09/21(火) 21:29:23.86 ID:pV6hI0Vx0.net]
>>109
vbaってグローバル変数の初期化できないのか・・・
見たことはない。変な気はする
とりあえずはシートに書くほうが楽だと思う
constでいいなら初期化が出来る。社名みたいにほぼ絶対変わらない物ならこれでもいいかも

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

>>113
わらった

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

あと、初期化用の関数はPublic指定にしておかないと別のモジュールから呼び出せないよ。ThisWorkbookから呼び出すんでしょ?

118 名前:デフォルトの名無しさん mailto:sage [2021/09/22(水) 08:55:25.77 ID:h9k7055fM.net]
ありがとうございます

119 名前:デフォルトの名無しさん mailto:sage [2021/09/22(水) 08:56:23.60 ID:h9k7055fM.net]
constやってみます

120 名前:デフォルトの名無しさん mailto:sage [2021/09/22(水) 11:22:09.41 ID:QukUYkwCa.net]
普通じゃなかったのか…俺もそうしてた
>>116
勉強になります



121 名前:デフォルトの名無しさん [2021/09/22(水) 15:13:16.34 ID:XBxd6ZoY0.net]
書籍「イヤンもう!最初からそう教えてくれればいいのに!ExcelVBAのプログラミングのツボとコツがゼッタイにわかる本」の評判はどうですか?買うか検討中なのですが。

122 名前:デフォルトの名無しさん mailto:sage [2021/09/22(水) 19:17:45.16 ID:igHuaWyKa.net]
>>120
ゼッタイにわかる本系の口語調文章に抵抗がないラノベ好きには良いんじゃない?

123 名前:デフォルトの名無しさん mailto:sage [2021/09/22(水) 19:18:09.88 ID:igHuaWyKa.net]
>>120
ゼッタイにわかる本系の口語調文章に抵抗がない人には良いんじゃない?

124 名前:デフォルトの名無しさん mailto:sage [2021/09/22(水) 19:19:18.20 ID:igHuaWyKa.net]
なにこのエラー去勢された

125 名前:デフォルトの名無しさん mailto:sage [2021/09/22(水) 19:35:51.24 ID:wAf2i/6rH.net]
>>120
人それぞれ印象が違うから、参考書は最初の2、3ページ立ち読みして自分で決めるのがいいよ

126 名前:デフォルトの名無しさん [2021/09/22(水) 20:05:10.79 ID:anCt84pS0.net]
イヤンもう
って言うから検索したら特にそんな単語ついてないじゃないですか

127 名前:デフォルトの名無しさん mailto:sage [2021/09/22(水) 21:46:48.06 ID:Th7N/2yOd.net]
https://i.imgur.com/Izd2bnq.jpg

128 名前:デフォルトの名無しさん [2021/09/22(水) 22:05:18.59 ID:anCt84pS0.net]
若い子が水着姿で教えるVBAの本なら簡単に死ぬほど売れるのでは?と思った

129 名前:デフォルトの名無しさん mailto:sage [2021/09/22(水) 22:14:11.23 ID:ER/2UqvV0.net]
そもそもVBA自体がオッサン臭い言語

130 名前:デフォルトの名無しさん mailto:sage [2021/09/22(水) 22:16:41.63 ID:cVN8rRFZM.net]
そもそも5ch自体がオッサン臭い場所



131 名前:デフォルトの名無しさん mailto:sage [2021/09/22(水) 22:21:20.29 ID:RvuuvfBjM.net]
そもそもオッサンしかいない

132 名前:デフォルトの名無しさん mailto:sage [2021/09/22(水) 23:01:12.21 ID:LAnicbtO0.net]
VBAとか作業記録してそれループするなり可変したりするなりちょっと直せば誰でも作れるからな

133 名前:デフォルトの名無しさん mailto:sage [2021/09/22(水) 23:14:36.78 ID:jBUNeyMwa.net]
「はたらくプログラミング 」
「高校生からはじめる プログラミング」
「メイクロックマン 史上最大のプログラミング」
「独学プログラマー Python言語の基本から仕事のやり方まで」
のようなアニメやゲームキャラやイケメンを
採用して若い子にアピールするとか
「乙女チック4Gamer」第267回:
「推しと学べるプログラミング」
初心者も学べるプログラミング学習ゲーム
とか

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

恋のプログラミング~ダメ男の見分け方~ DVD-BOX2
のようなDVDを付録に付けてみたりとか
とかとにかくVBAもなんとか頑張って欲しい

134 名前:デフォルトの名無しさん mailto:sage [2021/09/22(水) 23:55:17.87 ID:ToEmXEKY0.net]
オレも1冊3000円くらいのVBAの本買ったわ
その本をキーボードの下奥に置くと角度が良い感じになるんだわ
手首が疲れないし、職場でもなんか「やってる」感がかもし出せるし、本当に買って良かったと思える1冊だったな

135 名前:デフォルトの名無しさん [2021/09/23(木) 00:25:56.19 ID:1QHTb9H7a.net]
全国フェミニスト議員連盟が半泣き←いまここ
https://www.tokyo-np.co.jp/article/132305

136 名前:デフォルトの名無しさん mailto:sage [2021/09/23(木) 00:27:06.21 ID:4aFmMHLK0.net]
>>132
ん。
昔、EXCELVBAゲーム大作戦とかいう本が出てたよ。まぁVBAも昔からあるからゲーム作るのも先駆者がいたんだね。

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

137 名前:スりね。

まぁ暇でそういうの作ってみたいというのにはいいかもだけど、お仕事でVBA使うのの興味を持つために、というのにはちょっと重いかもね。
[]
[ここ壊れてます]

138 名前:デフォルトの名無しさん [2021/09/23(木) 00:56:08.87 ID:O9y54sVl0.net]
>>133
分かりすぎる
分厚い本って意外と重宝するよなw

139 名前:デフォルトの名無しさん [2021/09/23(木) 00:59:12.19 ID:O9y54sVl0.net]
vbaでゲームは基本的にかなりめんどくさい
メインのループ処理がキツイ
定期的に処理をエクセルに返してあげないと色々と不具合が起きる
曲芸でなければvbaで作るのは絶対に避けたほうが良い

140 名前:デフォルトの名無しさん mailto:sage [2021/09/23(木) 09:34:39.93 ID:MTBJM7920.net]
2つあるフレームの位置を調整していたら、
フレームAをフレームBの中にドラッグしてしまったらしく、
2つのフレームが一緒になってしまいました。

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

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

何かいい解決法があれば教えてください。



141 名前:デフォルトの名無しさん mailto:sage [2021/09/23(木) 09:39:09.54 ID:MTBJM7920.net]
自己解決しました。

@プロパティウィンドウでプルダウンからフレームAを選択する。
ACtrl+[A]で全選択した後、Ctrl+[X]で切り取り状態にする。
BフレームBのエリア外にマウスカーソルを持っていき、Ctrl+[V]で貼り付ける。

142 名前:デフォルトの名無しさん [2021/09/23(木) 11:52:58.11 ID:O9y54sVl0.net]
おめ〜^^

143 名前:デフォルトの名無しさん mailto:sage [2021/09/23(木) 13:11:17.06 ID:cmFu96z6a.net]
>>139
たった5分も考える事が出来んのか

144 名前:デフォルトの名無しさん mailto:sage [2021/09/23(木) 13:48:48.21 ID:tEWlRRfOM.net]
せっかく解決策書いてくれてるのにイチャモンつけるバカって何を考えてるんだろ…

145 名前:デフォルトの名無しさん mailto:sage [2021/09/23(木) 13:53:17.23 ID:DsLS3pBM0.net]
ただの寂しがり屋の暇つぶしとか

146 名前:デフォルトの名無しさん mailto:sage [2021/09/23(木) 13:59:57.49 ID:5gST2jZHM.net]
黙って去るやつよりよっぽどいいんだが

147 名前:デフォルトの名無しさん mailto:sage [2021/09/23(木) 14:03:41.04 ID:F4JAOFkVr.net]
配列からグラフを書いたときってデータ数の上限はありますか?
その場合どのように対処すれば良いですか?

148 名前:デフォルトの名無しさん mailto:sage [2021/09/23(木) 14:08:33.29 ID:KMctW7zL0.net]
>>145
上限を気にするようなデータ数だったら
excelでは重くて動かないと思う
別の言語で書いた方がいい

149 名前:デフォルトの名無しさん mailto:sage [2021/09/23(木) 14:45:47.29 ID:gN04ENXIM.net]
>>145
その場合はデータをコンパクトにまとめるしかなくね

150 名前:デフォルトの名無しさん mailto:sage [2021/09/23(木) 14:47:47.80 ID:dUOklB1+M.net]
>>145
数千個程度は描けたような記憶がある
そもそもそのレベルだと個々の値は見えないから複数個まとめて平均取るとかしてデータ量を減らせばいいかと



151 名前:デフォルトの名無しさん [2021/09/23(木) 15:12:01.32 ID:AtVLca4O0.net]
系列数に上限がいかにもありそう 255とか

152 名前:デフォルトの名無しさん [2021/09/23(木) 15:22:04.38 ID:AtVLca4O0.net]
>>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
これスレのテンプレに入れといてほしい

153 名前:デフォルトの名無しさん mailto:sage [2021/09/23(木) 18:38:01.80 ID:rxtBh7Jj0.net]
>>145
セルに適当なデータいれてグラフ作ったら 9万9千9百+α までしか表示されなかった
メモリの問題かもしれん

154 名前:デフォルトの名無しさん mailto:sage [2021/09/23(木) 18:52:18.65 ID:c0lh6Lzfr.net]
ごめんなさい
セルからではなく配列から直接グラフを読み込むときの話です。
自分の場合配列から散布図書いてて
データ数が15000?あたりから表示されなくなったので

155 名前:デフォルトの名無しさん mailto:sage [2021/09/23(木) 20:46:47.80 ID:rxtBh7Jj0.net]
だからメモリ少ないんじゃね

156 名前:デフォルトの名無しさん mailto:sage [2021/09/24(金) 16:28:38.47 ID:GLO6/yx90.net]
VBAで、リボンを常に表示させるてことできるんですか?
ググると
Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"", True)"
ていうのが出てくるんですが、
”タブとコマンドの表示”ていう状態にしたい。

157 名前:デフォルトの名無しさん mailto:sage [2021/09/24(金) 18:53:45.39 ID:towOKsyE0.net]
If Application.CommandBars.GetPressedMso("MinimizeRibbon") = True Then
Application.CommandBars.ExecuteMso "MinimizeRibbon"
End If

158 名前:デフォルトの名無しさん mailto:sage [2021/09/25(土) 02:37:13.36 ID:p3qnNTxE0.net]
>>155
おおサンクスww
できた。

なんでリボンの表示・非表示の記事書いてるやつはここまで書かないのかね。

159 名前:デフォルトの名無しさん mailto:sage [2021/09/25(土) 06:01:58.81 ID:A2HuAdJq0.net]
なんでだと思う?

160 名前:デフォルトの名無しさん [2021/09/25(土) 07:24:00.70 ID:i7f0lbxJ0.net]
しっかりと自分で考える事が大事!向上心をもって勉強しよう!



161 名前:デフォルトの名無しさん mailto:sage [2021/09/25(土) 07:50:31.86 ID:xUBmE3KO0.net]
ひろゆきのクラスモジュールの説明は的確で分かりやすかった

162 名前:デフォルトの名無しさん mailto:sage [2021/09/25(土) 07:51:02.02 ID:xUBmE3KO0.net]
クラスモジュールというよりはオブジェクト指向か

163 名前:デフォルトの名無しさん mailto:sage [2021/09/25(土) 13:59:25.45 ID:QZokVoY5p.net]
このスレにはクラスとかオブジェクト指向とかいうと、ファビョって「マウント取りに来たー!!」とか騒ぐじじいがいるから気をつけた方がいいぞ

164 名前:デフォルトの名無しさん mailto:sage [2021/09/25(土) 14:23:54.16 ID:ADwaIx4kM.net]
5chはじじいの巣窟ですよ。
子供は他所で遊んだ方が良いですよ。

165 名前:デフォルトの名無しさん [2021/09/25(土) 15:09:26.96 ID:kjOWSdg4a.net]
>>161
聞く方もじじいだし

166 名前:デフォルトの名無しさん mailto:sage [2021/09/25(土) 22:54:03.42 ID:/8ShLWKPp.net]
エクセル詳しい方にご質問。

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

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

見えない仕組みとか、基本的な仕様を見逃してるんかなぁ…

167 名前:デフォルトの名無しさん mailto:sage [2021/09/25(土) 23:52:15.96 ID:wPvtJ2EG0.net]
>>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
注: ユーザーは、この設定に関係なく、保護されたワークシートでオートフィルターを適用または削除できません。

168 名前:デフォルトの名無しさん mailto:sage [2021/09/26(日) 00:17:38.53 ID:BPwZjS350.net]
とあるフォルダへのショートカットを作成する方法を調べたところ、
コーディング前に、
>参照設定は、VBA画面→ツールメニュー→参照設定で「Windows Script Host Object Model」を選択します。
>これでWshShellクラスとWshShortcutクラスを利用できるようになります。
という記述がありました。

それで作れそうですが、
作った.xlsmファイルを他人に渡した場合、
その相手が上記の参照設定をしていない環境だったとしても、ショートカットの作成は行えますか?

169 名前:デフォルトの名無しさん mailto:sage [2021/09/26(日) 00:44:49.64 ID:vU9Y5LAHp.net]
>>165
ご回答頂きありがとうございます。

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

しかし、シートの保護とAutoFilterを両立できないとは、痒いところに手が届かない仕様ですな。

170 名前:デフォルトの名無しさん mailto:sage [2021/09/26(日) 01:37:23.16 ID:O844yIU50.net]
>>167
オートフィルターON/OFFと同時にシートの保護/解除も書いてしまえばいいんでないの?



171 名前:デフォルトの名無しさん mailto:sage [2021/09/26(日) 01:39:32.52 ID:BPwZjS350.net]
>>166
自己解決しました。

参照設定を変更しなくてもショートカットの作成は可能でした。
そちらの方法にします。
https://excel-ubara.com/excelvba4/EXCEL293.html

172 名前:デフォルトの名無しさん mailto:sage [2021/09/26(日) 01:46:25.94 ID:BPwZjS350.net]
ちなみに、
@参照設定で「Windows Script Host Object Model」をONにする。
AWshShellクラスとWshShortcutクラスを利用してコーディングする。
Bプログラムを実行する。
Cショートカットの作成に成功する。
D参照設定で「Windows Script Host Object Model」をOFFにする。
Eプログラムを実行する。
Fショートカットの作成に失敗する。(Aの中の定義について「ユーザ定義型は定義されていません」のエラー)
となったので、
>>166については、相手にも参照設定をしてもらわないとショートカットの作成は行えない、ということだと思います。

173 名前:デフォルトの名無しさん mailto:sage [2021/09/26(日) 01:51:41.55 ID:vU9Y5LAHp.net]
>>168
確かに、仰る通りですね。
保護は事前に設定しておくものと勝手に思い込んでいました。

一番良い形で解決できそうです。ありがとうございます。

174 名前:デフォルトの名無しさん mailto:sage [2021/09/26(日) 15:56:59.18 ID:ynzNBMLj0.net]
>>170
参照設定した内容はそのエクセルファイルに保存されてる
エクセルファイルを渡した先でその参照設定がちゃんと動くなら動く

175 名前:デフォルトの名無しさん mailto:sage [2021/09/26(日) 18:28:19.91 ID:6z2Q/VJPM.net]
二次元配列の第三カラムが重複していたらレコードまるごと排除して、かつ排除された分のレコードを別シートに転記することってできます?

連想配列に入れておけば重複してたらわかるようになるけど、そういう方法ってまとも?

176 名前:デフォルトの名無しさん mailto:sage [2021/09/26(日) 18:29:58.19 ID:Fsa0c3oL0.net]
第三限定なの?

177 名前:デフォルトの名無しさん mailto:sage [2021/09/26(日) 19:28:17.19 ID:HYuUGx6O0.net]
できるかどうかではなく、そういう処理を作りたいんじゃないの?

178 名前:デフォルトの名無しさん mailto:sage [2021/09/26(日) 21:42:42.58 ID:hcQxkCQHM.net]
配列とレコードとシートの区別ない人だね

179 名前:デフォルトの名無しさん mailto:sage [2021/09/26(日) 23:35:14.87 ID:ISHRJ32V0.net]
そういう方法で重複チェックをしたことはあるけど
それがまともかと聞かれるとわからんなぁ

180 名前:デフォルトの名無しさん mailto:sage [2021/09/27(月) 17:52:26.41 ID:wG/2iXK70.net]
配列は要素数が増減するものには向いてない
が、まあいろいろ頑張ればできる

連想配列でわかるのは、入れようとしたときに重複するかどうかで、そもそも重複したものは入っていないだろ



181 名前:デフォルトの名無しさん [2021/09/27(月) 21:07:52.71 ID:9JOCRyj50.net]
>配列は要素数が増減するものには向いてない
「vbaの」配列な
他の言語にはpushとか色々便利なものがあるんやで

182 名前:デフォルトの名無しさん mailto:sage [2021/09/27(月) 21:09:45.06 ID:1fIlBTl00.net]
Excelにはセルっていう使いやすい2次元配列があるからな
速度はご愛嬌

183 名前:デフォルトの名無しさん [2021/09/27(月) 23:17:35.36 ID:9JOCRyj50.net]
シート入れれば三次元やぞ

184 名前:デフォルトの名無しさん mailto:sage [2021/09/28(火) 06:06:35.41 ID:NhFpYAOsM.net]
>>179
> 他の言語にはpushとか色々便利なものがあるんやで
スクリプト言語とかだろそれ
言語自体の機能として配列のサイズを変えられる言語はそんなに多くないよ
そもそもVBAはその多くない言語に含まれるし

185 名前:デフォルトの名無しさん mailto:sage [2021/09/28(火) 11:35:58.86 ID:mkxQja700.net]
無いものねだりしてもしょうがない
そもそも他言語やっててVBAやった場合
ない機能をどうやって実装するか考えるのが
醍醐味なんだから

186 名前:デフォルトの名無しさん [2021/09/28(火) 12:14:47.38 ID:fFhZgLlN0.net]
>>182
実はVBAは「配列」のサイズを変えれる数少ない言語
まあ多分全コピー発生

187 名前:してるんだろうけど
コレクション系が弱いからそれぐらいできんとかなりツラい
今なら.NETの使うとか出来るけど
[]
[ここ壊れてます]

188 名前:デフォルトの名無しさん mailto:sage [2021/09/28(火) 13:45:05.92 ID:T/P4fEdFM.net]
>>184
> コレクション系が弱いからそれぐらいできんとかなりツラい
どこが弱いの?

189 名前:デフォルトの名無しさん mailto:sage [2021/09/28(火) 15:11:07.44 ID:8+n9QyO8M.net]
今の時代、メモリなんてたくさん確保しておけばよくね

190 名前:デフォルトの名無しさん [2021/09/28(火) 15:43:04.78 ID:ZLV/p08A0.net]
「たくさん」と言ったってワークステーションやサーバ系のハードウェアでない限りせいぜい64GBか128GBが上限では?



191 名前:デフォルトの名無しさん mailto:sage [2021/09/28(火) 15:46:57.39 ID:9IVurO/LM.net]
お、おう

192 名前:デフォルトの名無しさん [2021/09/28(火) 16:43:48.67 ID:yyyanN8B0.net]
64KBまでだよ

193 名前:デフォルトの名無しさん mailto:sage [2021/09/28(火) 16:48:32.26 ID:vws8rDV40.net]
VBA(Excel)にそんなメモリ使わせたらヒヤヒヤしちゃう

194 名前:デフォルトの名無しさん mailto:sage [2021/09/28(火) 17:35:37.46 ID:Fgmzo9M90.net]
long配列の下位16ビットにデータ格納されている
long[0],[1]の下位16ビットを結合するとsingleの値となる
(要はsingleが16ビット分割されてlong型に格納されている)
こんなデータが大量に格納されるんですが、上手く結合して型変換する方法がわかりません。。
val("&H" & hex(long(1)) & hex(long(0)))
で32ビット結合はできましたが、その後の暗黙的な変換なしでsingleに変更するにはどうするのが良いでしょうか?

195 名前:デフォルトの名無しさん mailto:sage [2021/09/28(火) 18:37:14.39 ID:nfdxFkKa0.net]
リアルタイムにやる必要が無いならバイナリでファイルに書いて
Singleで読むとか出来そうな気がする。
同じ考え方でADODB.stremも使えそう。

196 名前:デフォルトの名無しさん mailto:sage [2021/09/28(火) 20:20:03.83 ID:chK2kmIxd.net]
>>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

197 名前:デフォルトの名無しさん [2021/09/28(火) 21:06:13.76 ID:mkxQja700.net]
>>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

こんな感じに。
オーバーフローして表示しきれなくなった分は知らんけど。

198 名前:デフォルトの名無しさん [2021/09/28(火) 21:56:37.27 ID:mkxQja700.net]
おっと、すまんこ
括弧の位置間違えてた

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は論理演算子ではなくてビット演算子。

199 名前:デフォルトの名無しさん mailto:sage [2021/09/29(水) 02:45:23.84 ID:DNRsGaHg0.net]
>>191
SingleもLongも32ビット長なんだが、Singleの内部形式が分割されて二つのLongに16ビットずつ格納されているのか?
なんでそんなことになってるんだよ。Integer二つでいいじゃないか

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

Singleの内部形式はIEEE 754のはずだから、自分でビット演算してもできるだろうけど

200 名前:デフォルトの名無しさん mailto:sage [2021/09/29(水) 02:50:45.14 ID:DNRsGaHg0.net]
とりあえず作ってみた
エンディアンの呪いがかかってても知らん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



201 名前:デフォルトの名無しさん mailto:sage [2021/09/29(水) 03:32:54.18 ID:hT//j47fd.net]
VBAには共用体もポインタもないから、
LSetでメモリの内容をコピー
バイナリファイル経由
IEEEの内部フォーマットに合わせてゴリゴリ計算
ぐらいしか思い付かん

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

C#とか使えばもっと簡単にできるんで、そもそもこの作業はVBAに向いてない

202 名前:デフォルトの名無しさん mailto:sage [2021/09/29(水) 04:17:58.49 ID:DNRsGaHg0.net]
>>198
それ符号ビットの問題があるぞ
VBAには論理シフトとかないからな

バイナリファイルにするにしても、Longの不要な16ビット捨てる方法考えんといかん

203 名前:デフォルトの名無しさん mailto:sage [2021/09/29(水) 05:23:25.92 ID:HULqg2bxd.net]
符号ビット対策
64bit限定ならLongLong型を経由すればもっと簡単になるのか?どう書けばいいのかわからんけど

Dim MSB As Long
MSB = (Long0 And &H8000) And &H80000000
MyLong = MSB Or ((Long0 And &H7FFF) * &H10000 + Long1)

204 名前:デフォルトの名無しさん mailto:sage [2021/09/29(水) 05:43:02.15 ID:ia9ebpqvd.net]
訂正
MSB = ((Long0 And &H8000) <> 0) And &H80000000

205 名前:デフォルトの名無しさん mailto:sage [2021/09/29(水) 08:25:13.60 ID:slA14A+y0.net]
>>201
いや、Longの中に入っている時点でマイナスなら* -1してやればいいだけだけど、だったらもっと範囲の広い型で後ろ2バイト以外クリアする方が分岐もなくスッキリするだろう

206 名前:デフォルトの名無しさん mailto:sage [2021/09/29(水) 08:41:09.05 ID:+gGxbszWd.net]
>>202
元データの上位2バイトが00で埋まってた場合、論理シフトで符号が変わる場合があるでしょ
VBAには論理シフトがないから、何か別の方法で再現する必要があると思うんだけど
具体的に、動くコード書いてみて

207 名前:デフォルトの名無しさん mailto:sage [2021/09/29(水) 09:29:57.66 ID:ilMiUA0BM.net]
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

208 名前:デフォルトの名無しさん mailto:sage [2021/09/29(水) 09:40:16.79 ID:f5tfMzLod.net]
>>204
それなら最初にLongをByteにLsetすれば、マスクやシフトしなくても途中のバイトがそのまま取り出せる
コードの行数は増えるけど演算量はもっと減らせる

209 名前:デフォルトの名無しさん mailto:sage [2021/09/29(水) 12:56:20.18 ID:slA14A+y0.net]
>>203
ちょっと何を言ってるか分かりませんね。
まずシフトの話はどこから出てきたの?
Long型ならマイナスであれば常にトップビットは
立っているよね?
だからプラスに変換するってことだけど?
トップビットが立っていなければプラスなんで変換する必要はない。
もちろん、最初の設定値のLong型の下位2バイトでマイナスを表現するならそれぞれ*-1してやらなきゃいけないけど>>191を見た限りではそのような扱いでもないしね。

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

例えば、1バイトの変数で言えば、-1はFFhだよね。
これのトップビットを倒すと、7Fhになる。
つまり、1にはならずに127になるよね。

210 名前:デフォルトの名無しさん mailto:sage [2021/09/29(水) 19:09:56.88 ID:UXZ9zF/70.net]
VBAのウインドウの固定で行を選択するとA列に移動してしまうのはどうにかならない?
手動だとそのまま列でウインドウの固定になるから違いがよくわからん



211 名前:デフォルトの名無しさん mailto:sage [2021/09/29(水) 21:29:48.02 ID:7Q67NENAd.net]
>>206
元の質問と、そこに付いてるレスをよく読んで

212 名前:デフォルトの名無しさん mailto:sage [2021/09/29(水) 22:06:13.36 ID:bAaW5g7mM.net]
>>206
ゴタクはいいから
> 具体的に、動くコード書いてみて
って言われてるぞ

213 名前:デフォルトの名無しさん mailto:sage [2021/09/29(水) 22:10:21.46 ID:slA14A+y0.net]
>>209
具体的なコードは昨日既に>>195で書いているな。

214 名前:デフォルトの名無しさん mailto:sage [2021/09/29(水) 22:32:44.25 ID:helTTC1Td.net]
図解するとこういうことじゃないの?俺の理解が間違ってる?
https://i.imgur.com/z48adB1.jpg

215 名前:デフォルトの名無しさん [2021/09/29(水) 22:47:00.69 ID:slA14A+y0.net]
>>211
うん。それであってるよ。
ただ、.Netみたいにアンサインな型の変数が無いから
それをどうしようか、という話。
Longで普通に計算すると上位2バイトに65535(&HFFFF)辺りが入れば
例えば&HFFFF00000が入ったとして、4294901760が欲しいのに
普通にLong型だと-65536が取れちゃったりするよね。

216 名前:デフォルトの名無しさん mailto:sage [2021/09/29(水) 23:33:48.06 ID:slA14A+y0.net]
あ、でも*-1する方法じゃダメか。
これはあくまでマイナスをプラスにする方法であって、トップビットが立っていてもプラスとみなす方法じゃないからね。
そう考えるとやっぱりもう少し幅の広い変数持っといて計算する方法が楽かな。

だからみんなByte型とか使ってたのかー。
なんか勉強になったわ。

217 名前:デフォルトの名無しさん mailto:sage [2021/09/29(水) 23:39:44.93 ID:+/PybBD+d.net]
一つの例として、
Long[0]=&h00000000
Long[1]=&h00003E20
の時、得られるSingle値は0.15625になる
正しく計算できてるかどうか試してみればいい

>>191
Hexの戻り値は4桁とは限らないから、それでは正しく結合できないよ

218 名前:デフォルトの名無しさん mailto:sage [2021/09/29(水) 23:43:02.21 ID:+/PybBD+d.net]
あまんり綺麗なコードじゃないけど、一応動くと思う
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

219 名前:デフォルトの名無しさん mailto:sage [2021/09/30(木) 00:24:00.39 ID:PZiEyg+B0.net]
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

動いた。改行多すぎって言われたので詰めて書いてる。

220 名前:デフォルトの名無しさん mailto:sage [2021/09/30(木) 00:49:27.70 ID:pCEIeulu0.net]
>>214
それ、Longの上位下位どっち側にデータ入れるかによって
00 00 3E 20 で、数値表現としては &h3E200000 かもしれん
>>197はその前提で作ってるし>>211の図もそうだな

と思ったけど、HEX表現でそのまま連結してOKとか思ってるのか
3E 20 00 00 って格納してるのが正解なのか
エンディアンの呪いやっかいだなぁ



221 名前:デフォルトの名無しさん mailto:sage [2021/09/30(木) 05:21:02.09 ID:0qBy1lQqM.net]
>>210
それツッコミないのはあまりにもレベル低いからだぞ…

222 名前:デフォルトの名無しさん mailto:sage [2021/09/30(木) 06:14:58.44 ID:gM2Bcn3cd.net]
>>217
質問者が単純にHex関数の連結だけでOKだったと書いてるから、それぞれ下位16bitを使ってて、Long[0]が下位、Long[1]が上位側と読み取れる
まあ逆だったとしても簡単に修正できるし

223 名前:デフォルトの名無しさん [2021/09/30(木) 08:01:56.59 ID:R3l1DBbza.net]
質問する前に良く考えれば自力でできたんじゃね

224 名前:デフォルトの名無しさん mailto:sage [2021/09/30(木) 09:52:07.40 ID:Vb95uiyM0.net]
VBAで標準モジュールを削除するコードを書いてるんだけど、消えない場合がなくね?
removeしてもそれがすぐに反映されない。
commitするようなコマンドてある?

225 名前:デフォルトの名無しさん [2021/09/30(木) 10:02:50.98 ID:R1d8oRoFM.net]
ないならいいじゃん

226 名前:デフォルトの名無しさん mailto:sage [2021/09/30(木) 10:06:49.68 ID:XH3u7BFNM.net]
「場合がなくね?」を「場合がない」と読むのは流石に揚げ足取りが過ぎる

227 名前:デフォルトの名無しさん mailto:sage [2021/09/30(木) 10:16:54.23 ID:eFhgF698M.net]
なくね?
→なくない?
 ないよね?

言語仕様による違いかな

228 名前:デフォルトの名無しさん mailto:sage [2021/09/30(木) 10:20:26.49 ID:+bzcSAlDd.net]
文脈から言い間違いだと気づけないのはアスペだそうですよ

229 名前:デフォルトの名無しさん mailto:sage [2021/09/30(木) 10:58:49.96 ID:SEX1vFKW0.net]
> commitするようなコマンドてある?
 →commitが欲しい
  →なくね?は間違い

脳仕様による違いかな

230 名前:デフォルトの名無しさん mailto:sage [2021/09/30(木) 12:35:11.89 ID:Vb95uiyM0.net]
調べるとこういうことが起こってるみたいだな。
https://try2explore.com/questions/jp/11366816

VBComponents.Remove呼び出しは、VBAの実行が停止した場合にのみ実際に有効になる場合があります。
つまり、すべてのステートメントが終了するまで、またはコードがブレークポイントに達してデバッグを停止するまで、
削除操作は有効になりません。
これは、新しいモジュールをインポートするか、既存のモジュールのコードを新しいモジュールに置き換えるための次のコードが原因で問題になります。



231 名前:デフォルトの名無しさん mailto:sage [2021/09/30(木) 13:00:34.16 ID:aMauK9B30.net]
もう起こったぞ

232 名前:デフォルトの名無しさん mailto:sage [2021/09/30(木) 19:03:25.50 ID:gc4CAj+A0.net]
クリリンのことかー

233 名前:デフォルトの名無しさん [2021/09/30(木) 19:31:20.50 ID:4/dpkDC70.net]
>>220
多分ビット演算を知らないんだと思う
いずれにしてもバイナリごにょごにょはVBAには適さないとレス見てて改めて思った

234 名前:デフォルトの名無しさん mailto:sage [2021/09/30(木) 20:06:00.47 ID:aMauK9B30.net]
バイナリならByte型でやればいいのにね

235 名前:デフォルトの名無しさん mailto:sage [2021/09/30(木) 22:38:31.79 ID:tyeheD170.net]
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)」の部分がずっとループして止まらなくなった。

こんなことってありえますか?

236 名前:デフォルトの名無しさん [2021/09/30(木) 23:00:52.63 ID:sFWbYEj80.net]
AAA(i) って中身はなんだ

237 名前:デフォルトの名無しさん [2021/09/30(木) 23:03:17.67 ID:50MfSZL40.net]
>232
i=i-1

i=3
みたいにiが永久に10を超えない動作が入るとそうなる

238 名前:デフォルトの名無しさん mailto:sage [2021/09/30(木) 23:04:37.72 ID:Vp0fi7DV0.net]
普通に動いていると思っていただけで元々普通に動いてなかったとかはある
こんな感じのって言ってるから、そのソースそのまま受け取るわけには
いかんのだろうなって思った

239 名前:デフォルトの名無しさん mailto:sage [2021/09/30(木) 23:16:32.92 ID:VHGvetdVa.net]
初心者の頃は手動でセル入力してた方が早く終わってしまうのが、もどかしくもあるけど
それでもvbaは覚えるべきだと思っていろいろ頑張ってます

240 名前:デフォルトの名無しさん [2021/09/30(木) 23:22:00.84 ID:sFWbYEj80.net]
>>232 >>234
Function AAA(ByRef i As Variant) As Boolean
i = 3
AAA=True
End Function

こんな感じのじゃない?



241 名前:232 mailto:sage [2021/10/01(金) 00:46:48.32 ID:85aYXoDy0.net]
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の値に影響を与える、ということはないですもんね。
他の部分を明日あらためて確認してみます。
ありがとうございました。

242 名前:デフォルトの名無しさん mailto:sage [2021/10/01(金) 17:55:16.70 ID:fQjrPzOfa.net]
クラスを使うメリットってなに?

243 名前:デフォルトの名無しさん mailto:sage [2021/10/01(金) 19:26:10.62 ID:aPfKzK/z0.net]
見た目が美しい

244 名前:デフォルトの名無しさん mailto:sage [2021/10/01(金) 19:29:13.73 ID:AYkrwA2S0.net]
自己満足

245 名前:デフォルトの名無しさん [2021/10/01(金) 19:45:19.68 ID:3/37uweO0.net]
>>239
メソッドとプロパティが一箇所に集まって可視化しやすくなる
でもvbaのクラスは貧弱過ぎるので、モジュールで分けるのと大差ないという

246 名前:デフォルトの名無しさん mailto:sage [2021/10/01(金) 19:47:27.08 ID:4jCtmjal0.net]
>>239
色々あるが、VBAのクラス機能はゴミなのでマジで自己満が多いと思う
解説サイトで玄人の技・隠し機能みたいなノリで紹介されてるので、使えるとプロっぽく見える。

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

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

B標準モジュールではモジュールレベルで宣言した変数は実行中保存される。
なので、ある関数でモジュールレベルの変数に値を保存して、別の関数で再利用みたいな使い方が出来る。
でも標準モジュールだと当然その変数に保存できる値は一つなので使い勝手が悪い。
クラスモジュールならインスタンスごとに別の値を保存できる

247 名前:デフォルトの名無しさん mailto:sage [2021/10/01(金) 19:51:30.36 ID:4jCtmjal0.net]
この手の話題には「お前らは使いこなしてないからメリットを把握できてないが、俺は使いこなせてる」おじさんが来る

248 名前:デフォルトの名無しさん mailto:sage [2021/10/01(金) 19:59:58.89 ID:jrcl2rEY0.net]
処理高速化するクラスくらいは単純だし使いまわせるし使ってもいいんじゃない

249 名前:デフォルトの名無しさん mailto:sage [2021/10/01(金) 20:12:23.33 ID:HK8CLsAI0.net]
ただ単にすっきりして可読性がよい
クラスにしてると他人のコード化したときに何をしてるかもう一度把握するのが容易
自分でメソッドやプロパティを作るとファイルシステムオブジェクトやコレクションを扱い易くなる

250 名前:デフォルトの名無しさん mailto:sage [2021/10/01(金) 20:33:12.85 ID:4jCtmjal0.net]
JSとかと違ってモジュール内に構文で記述できない(単体のモジュールファイルとしてしか書けない)から、
クラスモジュールを書くこと自体が億劫に感じて余り印象よくないわ
プロジェクト内だとどこからでも呼び出せるから、どこでどう使われてるのかサッパリだし

イベント機能とか状態保存を有効に使いたい、コレクションを自作したい、
みたいな特別な理由がない限り使わない方がいいんじゃないかなぁと思ってる



251 名前:デフォルトの名無しさん mailto:sage [2021/10/01(金) 20:46:27.80 ID:g1N/sLwpM.net]
継承までは望まないとしてもせめてInitializeに引数を持てるようにして欲しかった

252 名前:デフォルトの名無しさん mailto:sage [2021/10/01(金) 20:53:23.76 ID:4jCtmjal0.net]
>>248
Initializeはコンストラクタじゃなくてイベントだから、
仮に引数があってもオブジェクトモジュール内じゃないと使えない上に、
インスタンスごとにイベントハンドラ用のモジュールレベル変数が必要になって面倒だと思う

253 名前:デフォルトの名無しさん mailto:sage [2021/10/01(金) 21:49:30.27 ID:j+Pc2S4XM.net]
イベントに引数渡せる言語はいくらでもあるのに何を言ってるんだ?w

254 名前:デフォルトの名無しさん mailto:sage [2021/10/01(金) 22:01:08.86 ID:4jCtmjal0.net]
>>250
どう読んだらそういうレスになるの?
読解力のないバカはこれだから困る

255 名前:デフォルトの名無しさん mailto:sage [2021/10/01(金) 22:07:37.29 ID:CXdVtwXkM.net]
>>251
はいはい、説明できないバカ乙
そもそもコンストラクタにすればいいだけの話だし

256 名前:デフォルトの名無しさん mailto:sage [2021/10/01(金) 22:11:26.60 ID:CmFZe7Ct0.net]
質問者の環境や能力を無視すんなよ

257 名前:デフォルトの名無しさん mailto:sage [2021/10/01(金) 22:24:35.99 ID:4jCtmjal0.net]
>>252
何をどう解釈したのか言ってくれれば対応できるけど、最早返答が意味不明過ぎるんだわ
何に対して「イベントに引数渡せる言語はいくらでもあるのに何を言ってるんだ?w」と疑問が沸いたのか説明して?

258 名前:デフォルトの名無しさん mailto:sage [2021/10/01(金) 22:34:31.13 ID:4jCtmjal0.net]
>>252
あと、VBAのクラスに「引数が付いたコンストラクタが欲しいな」っていう希望から
「Initializeに引数を持てるようにして欲しかった」っていう要望が出たのは明白だろう

で、イベントに引数を渡すのは面倒だよねって話をしたら「コンストラクタにすればいい」ってのもよくわからん。
だったらイベント関係なしに、初めから使いやすいコンストラクタ相当の言語機能が定義されてた方がいいだろう

259 名前:デフォルトの名無しさん mailto:sage [2021/10/01(金) 22:55:44.73 ID:f1R1MoFX0.net]
一般のObject指向言語で言うところの継承が使えないとか色々あるから普通にデザインパターンを考慮して作ろうとするとそこそこ制限受けるよね。

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

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

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

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

まあでもそういうのに頭使って組むからVBAは面白いんだと思うよ。
他のObject指向言語やってる人って結構インターフェースの概念を疎かにしたりするしね。

260 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 02:59:35.03 ID:xagjL2JO0.net]
イベントに引数渡す(というか受け取る)のは別に面倒でもなんでないから
コンストラクタの引数をInitializeイベントに渡せたらまあそれもいいんだが
VBAだとInitializeイベントがオーバーロードできないからなぁ

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

俺はVBAのクラスは自作イベント使いたいときに使うものと思ってる



261 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 06:05:15.61 ID:g1EUYVpxM.net]
>>254-255
イベントだから何?って話
VBAでも引数を持つイベントはあるし、できない理由を必死に探してるだけにしか見えない
そもそもイベントとコンストラクタなんてある意味呼び方の問題だし

262 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 06:08:02.24 ID:g1EUYVpxM.net]
>>256
> あ?コンストラクタに引数?
> そんなのは初期化用のメソッド作って呼びゃいいだろうと俺は思うけどね。
> まあでもそういうのに頭使って組むからVBAは面白いんだと思うよ。
そういうのは頭使うとは言わない
単に面倒(かつバグの元)なだけ
無い物ねだりすんなと言うならわかるけど

263 名前:デフォルトの名無しさん [2021/10/02(土) 07:21:09.62 ID:f83gGEH/0.net]
VB7を待て!

264 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 07:44:35.99 ID:PmOXqFk20.net]
>>259
言ってる意味が分からない。
生成した後初期化用のメソッド呼ぶだけだろ?
なんでそんなのが面倒でバグの元になるんだ?
お前はそんな程度でバグを生むソースを書くのか?

265 名前:デフォルトの名無しさん [2021/10/02(土) 07:49:32.43 ID:i6pQYLUQ0.net]
それ言い出すとどんな言語でも「だけ」になるぞ

266 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 07:52:52.17 ID:PmOXqFk20.net]
それにポリモーフィズムを理解している奴ならむしろバグやUTケースを減らせるコードが書ける。
でなければObject指向なんてここまで浸透しなかっただろうよ。

267 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 07:53:44.67 ID:PmOXqFk20.net]
>>262
例えば?

268 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 08:50:27.63 ID:7sXji/t3M.net]
むしろ>>263の方に例えば?って言いたいわw

269 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 09:59:20.90 ID:PmOXqFk20.net]
>>265
学生なのか?
社会人であるなら上司から
質問を質問で返すようなマネはするなと
教わらなかったのか?

まぁいい
答えてくれれば答えよう
それが順序というものだ

270 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 10:26:50.08 ID:SSNRs28sM.net]
>>266
バカなの?
別人だし>>263は質問じゃねーし
まあまともな答えは期待してないから答えなくてもいいぞw



271 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 10:45:25.61 ID:l9bGJwl90.net]
>>267
お前はまた勉強する機会を損失した
ただそれだけのこと

272 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 11:55:15.97 ID:SSNRs28sM.net]
勉強?
からかわれてることぐらいは理解した方がいいぞw

273 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 11:56:22.57 ID:h3OHY9Ln0.net]
まあまあ、通りがかりの者だけど、お前ら仲良くやれや

274 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 12:17:57.73 ID:4Bm9Y75Jp.net]
まったく最近のじじいは
マウントどうのとかほざくくせに
負けず嫌いで困る

275 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 12:26:19.80 ID:s0PycLWJM.net]
5chはじじいの巣窟ですよ。
子供は他所で遊んだ方が良いですよ。

276 名前:デフォルトの名無しさん [2021/10/02(土) 17:44:59.50 ID:i6pQYLUQ0.net]
>>264
クラスにコンストラクタがない
→newの後にメソッドなりで中身かえればいい「だけ」

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

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


ただ、俺はやだなぁ
ついでに言うとarrayにpushはマジで欲しい

277 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 17:50:29.29 ID:ffSwt3TR0.net]
>>273
したくないのは自由だが、いまさらVBAが更新されることはないから、諦めて他の言語に行ってくれ

278 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 18:23:04.84 ID:xagjL2JO0.net]
>>263
ちゃんとしたオブジェクト指向言語使えば減らせるってならともかく
VBAでオブジェクト指向でやってUTケース減らせると思えんが

ちょっとVBA関係ない話になるが
お前の思うポリモーフィズムと引数付きコンストラクタの使いどころ教えてくれ

279 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 18:24:23.99 ID:yfSowQXWM.net]
>>274
> いまさらVBAが更新されることはないから
みんなそんなことはわかってるけどいきなりどうしたw

280 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 18:35:12.83 ID:ffSwt3TR0.net]
>>276
無駄な議論する意味なしでしょ
VBAの質問スレだし



281 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 19:02:41.91 ID:/B20gKTEM.net]
ああ確かにそうだな
そりゃすまん

282 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 21:28:02.67 ID:PmOXqFk20.net]
>>275

283 名前:> そうだな、ちょっとその前に
例えば一つの例としてゲームを作ったとしよう。
それは簡単なシューティングゲームだったとして、
キャラクターの中に自機、弾、敵、ヒットマークがあったとする。
キャラクター数の上限は考えないものとし、敵は幾つか種類がいるものとして、ひとつは地形判定を行う、一つは弾を打つ、等の違いがあった場合、
君ならどう作るか聞いてもいいかな?

質問を質問で返すようなことするなと言っておいて悪いが最初に認識を合わせるために聞いておきたい。
[]
[ここ壊れてます]

284 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 21:48:51.07 ID:PmOXqFk20.net]
>>273
そもそも論として、クラスを使わなければ何か出来ないことがあるかと言われれば、それはあまり思い付かない。
ただ、VBAでクラスのコンストラクタに引数を持ってないという程度であればそれで代用が効くだろうという話。
それも面倒だというのであれば、クラスを生成して初期化するメソッドを作ってそれに引数を持たせるようにして呼び出せばいくつそういう場所があっても一回書いておけばいいということになる。

285 名前:デフォルトの名無しさん mailto:sage [2021/10/03(日) 05:20:08.91 ID:fyf/YlYy0.net]
>>279
認識あわせの例がシューティングゲームとかその時点でお前とは合わんわ
シューティングゲームとか作らんし、その想定でどう作るとか言われてもな
まあ一から全部作ることはないし、何らかのフレームワークに従って作るんじゃね
そんな細かい実装的な話を聞きたいんじゃないんだよ

286 名前:デフォルトの名無しさん mailto:sage [2021/10/03(日) 07:39:28.72 ID:8uofczFap.net]
>>281
話が合わないというのには同意だ
新しい何かを作る際にその構成が考えられない人に説明しろと言われてもな。
VBAスレでフレームワークとかも持ち出す意味ないしな。

287 名前:デフォルトの名無しさん [2021/10/03(日) 11:58:59.58 ID:Lx3l1CXP0.net]
ガンダムで例えてくれ

288 名前:デフォルトの名無しさん [2021/10/03(日) 12:18:23.19 ID:PztuncMq0.net]
坊やだからさ

289 名前:デフォルトの名無しさん [2021/10/03(日) 12:51:23.55 ID:oCTMWA/sa.net]
excel+vbaでマインスイーパーは造れますか?
どこかにソースありますか?

290 名前:デフォルトの名無しさん mailto:sage [2021/10/03(日) 12:54:45.72 ID:cPfMe0TfM.net]
>>285
考えただけでも簡単そう
ソースはしらんけど



291 名前:デフォルトの名無しさん mailto:sage [2021/10/03(日) 13:18:38.78 ID:PZL9KPgcM.net]
vba minesweeper code でググれ

292 名前:デフォルトの名無しさん [2021/10/03(日) 22:35:03.42 ID:x8fdTISD0.net]
教えて下さい
ガンチャート形式の日程表で
日付の色塗りだけじゃなくて
タスク表示(その日の予定)もさせたいんだけど
どう関数組んだらいい?

293 名前:デフォルトの名無しさん mailto:sage [2021/10/03(日) 23:22:18.21 ID:VDfIFkhd0.net]
>>288
ガントチャート形式の日程表とやらの構成はどうなっている?
日付の色塗りとは、何を指している?
タスク表示とは、タスク名?をどこに表示させることを言っている?

このへん予め提示しないと解決が長引くよ

294 名前:デフォルトの名無しさん mailto:sage [2021/10/04(月) 00:04:37.41 ID:j9cfwAH/0.net]
>>288
セルサイズを大きくしてタスクを入力すればいい

295 名前:デフォルトの名無しさん [2021/10/04(月) 01:17:19.95 ID:BaE5qGe00.net]
excel ガントチャート フリーで検索

296 名前:デフォルトの名無しさん mailto:sage [2021/10/04(月) 09:25:56.63 ID:dlhTdODc0.net]
質問失礼します
タイマーで二つのマクロを順番に実行したいのですが
ひとつめのマクロ実行が長引いてしまい
マクロ実行中にApplication.OnTimeのcallで次のマクロが動くとエラーになってしまいます
Application.OnTimeの時間になっても前のマクロが終わるまで待つやぶつからなくする方法はあるでしょうか?

297 名前:デフォルトの名無しさん mailto:sage [2021/10/04(月) 09:37:56.41 ID:X/RNGavO0.net]
>>292
へ?
ひとつ目の実行開始時に処理中フラグ立てて
実行終了時に倒すようにして
それ見て二つ目のマクロの処理を飛ばすか
待たせてまた実行するかすればいいんじゃないの?
聞いてる意味違う?

298 名前:292 mailto:sage [2021/10/04(月) 10:15:29.97 ID:dlhTdODc0.net]
>>293
はいあっています
処理中のフラグでぐぐると色々出てきました
困っていたので助かりました
ありがとうございます

299 名前:デフォルトの名無しさん mailto:sage [2021/10/04(月) 10:57:06.41 ID:JQlH+vDNM.net]
ontimeの第3引数も調べてね

300 名前:デフォルトの名無しさん mailto:sage [2021/10/04(月) 12:27:18.56 ID:kyO84GtQa.net]
関数に引数が七つも八つもあるとわかりにくくなるから、それならクラスにしておけば、可読性が良くなるのかな



301 名前:デフォルトの名無しさん mailto:sage [2021/10/04(月) 12:54:51.17 ID:X/RNGavO0.net]
>>296
そうね。
ただVBAのクラスは1クラス1モジュール使ってしまうのと、クラスが格納されているフォルダが一階層しか使えないからネーミングに気を付けて後でそれがそういう意味を持つクラスだって分かるようにしておかないとね。

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

ただしこの場合は引数として渡すんじゃなくてその標準モジュール側に作ったプロパティを直接読みに行くことになるけどね。まぁ使い分けだね。

302 名前:デフォルトの名無しさん mailto:sage [2021/10/04(月) 13:39:00.82 ID:1MgeDxIh0.net]
マクロを実行させると、Excelが落ちてしまい、
ステップ実行させるとマクロが正常終了orExcelが落ちない
ていう事になってるんだが、
どこで異常終了してるか調べる方法ある?

303 名前:デフォルトの名無しさん mailto:sage [2021/10/04(月) 13:41:09.43 ID:X/RNGavO0.net]
>>298
ブレイクポイント貼りまくりで
徐々に外して落ちてる範囲を狭めて
最終的ににどこで落ちてるか確定させる

304 名前:デフォルトの名無しさん mailto:sage [2021/10/04(月) 13:54:27.50 ID:X/RNGavO0.net]
上記のやり方が大変だというのであれば
Logをどこかのtxtファイルにはく、という手もある。

305 名前:デフォルトの名無しさん mailto:sage [2021/10/04(月) 14:13:00.80 ID:1MgeDxIh0.net]
>>299,300
ブレイクポイントを貼ると落ちない。
なんとなくやばい場所は分かってるんだけど、on errorでもcatchできないんだよな。
やってることは、 uiautomationを使ってコンボボックス叩く(Expand)てことやってるんだが、
おそらくその行で落ちるんだが、
落ちずに成功する場合もあるんだよな。

306 名前:デフォルトの名無しさん mailto:sage [2021/10/04(月) 14:34:03.70 ID:AbV0YbaI0.net]
>>301
WinAPIで似たような事があった
本来待ち時間が必要な処理を待たずに次へ行くからブレイクポイント無しだと落ちるってケースね
怪しい所にSleep関数使って500ミリ秒待たせたら落ちなくなった事があるよ

307 名前:デフォルトの名無しさん mailto:sage [2021/10/04(月) 15:02:49.67 ID:1MgeDxIh0.net]
298です。
いろいろ試してみると、マクロを実行じゃなくてステップインボタン押してF5で実行させると落ちない事がわかった。
ならば、待ち時間の問題かと思って、sleepとかDoEventsを入れてみても、落ちる。
今の所唯一の回避策がステップイン+F5だな。
ググるとステップインだとうまくいくていう記事は散見されるが、合理的な説明はない。

308 名前:デフォルトの名無しさん mailto:sage [2021/10/04(月) 15:29:55.92 ID:NBSFfuMDM.net]
コンボボックスって表示したときにはテータは入ってなくて
クリックされたときにデータを読みに行くとかじゃなかったかな

309 名前:デフォルトの名無しさん mailto:sage [2021/10/04(月) 18:42:56.09 ID:CJXp4LD30.net]
タイマーの間隔が短すぎなんじゃね

310 名前:デフォルトの名無しさん mailto:sage [2021/10/04(月) 19:42:11.08 ID:2sXWsmVMa.net]
ワークブック開きすぎ(それも容量やシートが多すぎ)や、複数アプリケーション開きながらマクロ動かすと遅くなるからそういうところからも気をつけるといいかもしれない事例



311 名前:デフォルトの名無しさん mailto:sage [2021/10/04(月) 20:35:24.21 ID:X/RNGavO0.net]
>>303
当たりをつけるというフィジカルな部分ももちろん大事だけれど、本当に自分が当たりをつけたところが原因なのか切り分けを行った方がいいね。

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

もっとも、都度落ちる箇所が違う場合もあるかもだろうけど、そうなったらそうなったでそれから当たりをつけて調べればいいのであって、まず落ちている箇所が特定出来れば原因もある程度絞れるよね。

312 名前:デフォルトの名無しさん mailto:sage [2021/10/04(月) 20:43:05.82 ID:TWw1hYLnM.net]
>>296
たいていはユーザー定義型で十分

313 名前:デフォルトの名無しさん mailto:sage [2021/10/04(月) 22:16:21.62 ID:YLhov1R00.net]
For i = 1 to 10
Call Sleep(200)
DoEvents
Next i

314 名前:デフォルトの名無しさん [2021/10/05(火) 00:51:53.00 ID:AqVIusQn0.net]
>>296
お前の知能が足りなくてアウアウしてるだけだろ

315 名前:デフォルトの名無しさん mailto:sage [2021/10/05(火) 15:40:04.36 ID:dJ3N05Swa.net]
ちょっと教えてください
コントロール上にマルチページ「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

316 名前:デフォルトの名無しさん mailto:sage [2021/10/05(火) 15:45:39.37 ID:dJ3N05Swa.net]
補足ながら>>311はMPもマルチページとして宣言するか該当箇所をMP.Pages("D3").Name = "X3"に書き換えれば期待通り動くんですよね
どういう仕組みなのか

317 名前:デフォルトの名無しさん mailto:sage [2021/10/05(火) 15:56:25.07 ID:hS5WuwV9r.net]
worksheetfunctionの引数に配列入れるときって数に上限があるな
警告も出さないしほんまクソ

318 名前:デフォルトの名無しさん mailto:sage [2021/10/05(火) 15:56:31.46 ID:hS5WuwV9r.net]
worksheetfunctionの引数に配列入れるときって数に上限があるな
警告も出さないしほんまクソ

319 名前:デフォルトの名無しさん mailto:sage [2021/10/05(火) 16:15:51.73 ID:2oqKIsmm0.net]
>>312
いや
普通に通るけど。ちな2016。

320 名前:デフォルトの名無しさん mailto:sage [2021/10/05(火) 16:19:44.73 ID:2oqKIsmm0.net]
あ、でもこっちはOption Explicit 付けてたから
MPはキチンと型宣言してたな。
でもそこはあまり関係ないよね?



321 名前:デフォルトの名無しさん [2021/10/05(火) 16:21:29.24 ID:dJ3N05Swa.net]
>>316
や、たぶん関係するっぽいですかね?
こちらオプション無し、宣言は無しまたはas objectだとダメでas multipageだと通った

322 名前:デフォルトの名無しさん mailto:sage [2021/10/05(火) 16:29:34.84 ID:2oqKIsmm0.net]
>>317
ふーん
不思議だねぇ
ちなみに宣言しないで走らせたときの
MPの内部型ってどうなってる?
ごめん、もう走ったからこっちは
EXCELのブック消しちゃったんだ。

323 名前:デフォルトの名無しさん mailto:sage [2021/10/05(火) 16:32:02.05 ID:dJ3N05Swa.net]
variant/object/multipageでした

324 名前:デフォルトの名無しさん mailto:sage [2021/10/05(火) 16:36:45.31 ID:2oqKIsmm0.net]
>>319
やっぱり不思議だねぇ
その辺の内情は分からないな
一応片付いたことになるのかも知れないけど
誰かその辺知ってたらレスが付くんじゃないかな

325 名前:デフォルトの名無しさん mailto:sage [2021/10/05(火) 16:39:04.47 ID:dJ3N05Swa.net]
そうですね、とりあえず急ぎとか困りではないので一旦これで…
ご回答ありがとうございました

326 名前:デフォルトの名無しさん mailto:sage [2021/10/05(火) 18:26:27.16 ID:jAVyPZWcM.net]
型推論するのに失敗してるんじゃね

327 名前:デフォルトの名無しさん mailto:sage [2021/10/05(火) 21:37:47.06 ID:LdUtAYwX0.net]
Pagesの引数に変数渡すと数字として解釈しようとしてるっぽいな
buf = "2" とかにするとIndex=2のページを参照してるようだ
文字列リテラルならちゃんと名称として解釈してるっぽい
ちな365の64ビット

これ以上はサポートにでも問い合わせるしかねぇんじゃね

328 名前:デフォルトの名無しさん [2021/10/07(木) 18:28:58.89 ID:p9itA/YXa.net]
マクロの記録機能使ってマクロの作成したいんだがピボットテーブルのプルダウンから任意の値だけを抜き出すのってどうやってやればいいの?

毎回モジュール見直すとvisible farceになってて要するに抜き出したいもの以外を表示しないようにしてる構文て事だよね?
こうなると仮に次回このマクロを使う時にvisible farceになってない値が新しく出てくるとそれも表示されちゃうって事だよね?
じゃなくていくら値が増えても決められた値だけを抜き出すように作りたいんだ
どなたか教えて下さい

329 名前:デフォルトの名無しさん mailto:sage [2021/10/07(木) 20:11:24.24 ID:70iiidwq0.net]
>>324
記録してみてどうなってるか見てみれば分かるじゃん

330 名前:デフォルトの名無しさん mailto:sage [2021/10/07(木) 21:05:39.19 ID:D5dO/oMJ0.net]
>>324
Falseね
ピボット周りのフィルタはFor EachでTrueFalseを一つ一つやっていかないと無理な仕様
遅いしわかりにくいけど割り切って



331 名前:デフォルトの名無しさん mailto:sage [2021/10/07(木) 21:29:48.70 ID:AykPZAFh0.net]
ActiveSheet.PivotTables("ぴぼっとてーぶる").PivotFields("ふぃーるど").ClearAllFilters
ActiveSheet.PivotTables("ぴぼっとてーぶる").PivotFields("ふぃーるど").PivotFilters.Add Type:=xlCaptionEquals, Value1:="表示したいもの"

332 名前:デフォルトの名無しさん mailto:sage [2021/10/07(木) 23:55:42.12 ID:P9pCLiyt0.net]
VBAで最適化したら仕事増やされた話ってよく聞くけど
そいつが辞めたらそいつに回されてた膨大な仕事はどうなるん

333 名前:デフォルトの名無しさん [2021/10/08(金) 00:17:45.54 ID:sJT5Ti/qa.net]
うちの職場は適当にvbaでつくったやつをちゃんとしたアプリに置き換えてるよ

334 名前:デフォルトの名無しさん mailto:sage [2021/10/08(金) 00:31:33.80 ID:GXvDbP/z0.net]
アプリだろうがvbaだろうが作った人間がやめたらメンテできなくて終わるんじゃないの
開発者が大勢いるようなレアな職場ならともかく
vba使ってるところなんてたいてい事務で
エクセル職人が少数いるだけだろ

335 名前:デフォルトの名無しさん mailto:sage [2021/10/08(金) 00:37:30.31 ID:d3eTt0zpM.net]
実際にはそういうときには業務そのものが消滅するケースも多いよ
そもそもVBAで簡単に自動化できるような業務はもともと無意味であるものが多いからな

336 名前:デフォルトの名無しさん mailto:sage [2021/10/08(金) 02:32:08.41 ID:KEaimES90.net]
人がやめた後に職場がどうなるかはその職場の責任者が決めるんじゃね
下っ端が気にすることじゃない

337 名前:デフォルトの名無しさん mailto:sage [2021/10/08(金) 04:11:36.40 ID:vcejz6/Ud.net]
市販アプリでも、天才的な開発者が辞めて、会社もろともアプリもダメになって終わったパターンをいくつも見てきた

338 名前:デフォルトの名無しさん mailto:sage [2021/10/08(金) 07:11:46.26 ID:GXvDbP/z0.net]
>>331
>>333
なるほどねありがとう

339 名前:デフォルトの名無しさん [2021/10/08(金) 08:09:49.53 ID:Am1Ugnvua.net]
>>326
>>327
丁寧にありがとう
色々試してみます

340 名前:デフォルトの名無しさん [2021/10/08(金) 09:40:27.58 ID:JQJjKarL0.net]
CPU使用率が大きかったのでダメもとで開いて修復を実行したら
かなり軽くなるのな、知らんかった
これ定期的にやったほうがいいのか?
VBAのコードを一旦退避させるのが面倒だが...



341 名前:デフォルトの名無しさん mailto:sage [2021/10/08(金) 17:00:42.44 ID:EVmjGNOc0.net]
>>336
詳しく

342 名前:デフォルトの名無しさん mailto:sage [2021/10/08(金) 22:11:41.59 ID:x7uCSItJ0.net]
属人的にならない仕組みで効率化できればいいんだが、頭の中が古き良きな方々が幅を利かせる日本ではなかなか難しい

343 名前:デフォルトの名無しさん mailto:sage [2021/10/09(土) 01:49:50.17 ID:98oBjVW70.net]
自分が初めてVBAを使って解決した時点で、他にVBAを使う人がいないんだから属人化しないわけがないと思うけどな
しかもVBAってプログラミング言語の中では非常に初心者向けなわけで、
誰もVBAで組めない=プログラミングに全員疎いのはほぼ決定なんだから尚更さ

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

相当な根気が必要だと思うよ

344 名前:デフォルトの名無しさん mailto:sage [2021/10/09(土) 02:16:01.12 ID:2HXwYm4Z0.net]
そもそも人に仕事が割り振られた段階で属人化されてるわけで
たんに次の人が困って終わりだよ

345 名前:デフォルトの名無しさん mailto:sage [2021/10/09(土) 02:30:43.66 ID:98oBjVW70.net]
確かに。
レス漁ってみたが、
ここでいう「属人化で困る」は「他の人にはできないVBAというテクニックを持つオレスゲー」を単にオブラートに包んだだけっぽい感じがするな

346 名前:デフォルトの名無しさん mailto:sage [2021/10/09(土) 02:49:32.47 ID:0Qsp0NFP0.net]
マクロの効率化ガン無視で社員の手が開いた分だけ仕事を割り振る上司がいるらしいけど
その時点である意味属人化してるよね
その仕事引き継ぐやつ
まずさばき切れないだろ

347 名前:デフォルトの名無しさん mailto:sage [2021/10/09(土) 04:49:21.33 ID:UCXjyRPA0.net]
うちの職場ではほとんどの人がマクロできるけど、新人に自信持たせるためにわざわざ気を使って
「君マクロできるなんて凄いね〜」っておだててるのに同調するのが正直めんどくさい

348 名前:デフォルトの名無しさん mailto:sage [2021/10/09(土) 04:50:24.64 ID:0Qsp0NFP0.net]
そういうとこは給料高そうで羨ましい

349 名前:デフォルトの名無しさん mailto:sage [2021/10/09(土) 05:01:41.26 ID:UCXjyRPA0.net]
>>344
給料は個人の能力に比例します

350 名前:デフォルトの名無しさん mailto:sage [2021/10/09(土) 08:10:48.77 ID:KDe6uexsd.net]
新人の育成は面倒だけど将来的に必要なことだからなあ
褒めた方が上達が早いってのも科学的に証明されつつあるし、そういうもんだからあきらめろ



351 名前:デフォルトの名無しさん mailto:sage [2021/10/09(土) 08:19:40.75 ID:0Qsp0NFP0.net]
全員VBAできるとか絶対給料高いとこだろ
うちのところなんて一人しかいないよ
しかも残りは関数すらまともにあつない

352 名前:デフォルトの名無しさん mailto:sage [2021/10/09(土) 08:21:07.29 ID:0Qsp0NFP0.net]
おかげで効率がすげー悪い
基本は専用ソフト扱うからエクセルは必須ではないとはいえ
それでもエクセルやVBAやれるのとやれないのとでは効率が雲泥の差

353 名前:デフォルトの名無しさん mailto:sage [2021/10/09(土) 08:31:06.39 ID:HlWFX8NcM.net]
選民思想ここに極まれり

354 名前:デフォルトの名無しさん mailto:sage [2021/10/09(土) 08:33:14.89 ID:qDyUb0P50.net]
研修とか外部の自宅学習プログラムでもやったら?
費用は会社持ち、報奨金も少しは付けて

355 名前:デフォルトの名無しさん mailto:sage [2021/10/09(土) 08:37:41.66 ID:0Qsp0NFP0.net]
そんな金あったら給料上げてレベルの高い人材雇うか
もうちょっとマシな専用ソフト使ってる
金をケチったせいでオンボロ専用ソフト使わせれて
専用ソフトじゃフォローしきれないのでエクセル活用しないと行けない羽目になってる

356 名前:デフォルトの名無しさん mailto:sage [2021/10/09(土) 08:57:09.18 ID:g5OHjBNSd.net]
会社は社員に楽させたいと思ってるわけじゃない、という大前提
人材なんて時間いっぱい、めいっぱい働かせてナンボ
安いアプリを買って、あとは社員にやらせて、それで回ってるなら何も問題ないんだよ

357 名前:デフォルトの名無しさん mailto:sage [2021/10/09(土) 09:27:27.16 ID:0Qsp0NFP0.net]
高い金出して高価な専用ソフト使うくらいなら
多少残業代だしてもいいからボロソフト使ったほうが安上がりだからな

358 名前:デフォルトの名無しさん mailto:sage [2021/10/09(土) 09:42:15.79 ID:58+qPlR+0.net]
エクセルはマス目状に文章を入力できるソフトぐらいにしか思ってない人もいるしなあ

359 名前:デフォルトの名無しさん mailto:sage [2021/10/09(土) 15:35:55.10 ID:8vFa8kgUd.net]
>>354
ウチの会社の事務方ほとんどそれだわ
セルの結合しまくって数値手入力とか当たり前

360 名前:デフォルトの名無しさん mailto:sage [2021/10/09(土) 20:10:49.92 ID:J89rndhPa.net]
セル結合せずにせめて広げろや、とは思う



361 名前:デフォルトの名無しさん mailto:sage [2021/10/09(土) 20:26:49.65 ID:XLSjDb/pM.net]
セル結合とvlookupをディスってようやくエクセル使いとして一人前

362 名前:デフォルトの名無しさん mailto:sage [2021/10/09(土) 20:30:33.16 ID:0Qsp0NFP0.net]
べつにvlookupは悪くないだろ俺は使いたくないけど

363 名前:デフォルトの名無しさん mailto:sage [2021/10/09(土) 20:58:23.98 ID:ZXG2HktNM.net]
>俺は使いたくないけど
さりげないアピール

364 名前:デフォルトの名無しさん mailto:sage [2021/10/09(土) 20:59:19.46 ID:ZXG2HktNM.net]
>俺は使いたくないけど
さりげなさを装ったアピール

365 名前:デフォルトの名無しさん mailto:sage [2021/10/09(土) 21:05:39.47 ID:LYlfiTybM.net]
VLOOKUPディスってるのは情弱だろ
2016からめっちゃ高速化されてるから数万行ぐらいなら普通に使える

366 名前:デフォルトの名無しさん mailto:sage [2021/10/09(土) 21:11:18.66 ID:0Qsp0NFP0.net]
高速化とかどうでも良い
左端しかデータが使えないのが不便
無駄な検索用データが全部左端に固まる

367 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 06:43:03.77 ID:LB6rENWtp.net]
個人的に使いたい使いたくないは仕方がない
適材適所で最適解を出す手段に自ら縛りを掛けているだけだから
それで他の人に迷惑掛けている訳でなければとやかく言う筋合いでも無いしな

368 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 08:15:02.57 ID:AQQzB40DM.net]
>>362
XLOOKUP使え
うちの環境だとまだ使えないけど... orz

369 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 10:34:27.64 ID:iKRuQHQv0.net]
index matchでええやん

370 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 15:09:30.75 ID:2USb7I2AM.net]
MATCHはいちいちIFERROR組み込まなきゃいけないから式が冗長になりがちであんまり好きくない



371 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 15:39:33.06 ID:wqZqaK12d.net]
そもそもスピードは求めてない
元データを1日に何回もアップデートするわけじゃないし

372 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 15:46:10.06 ID:iKRuQHQv0.net]
>>366は何使ってんの?

373 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 16:04:08.10 ID:2USb7I2AM.net]
>>368
あんまり関数でデータベース検索かけたくないけどかけなきゃいけないならXLOOKUP、自分以外が使う可能性があるならVLOOKUPかHLOOKUPかなぁ
状況に合わないならMATCHも使うけど使用優先度は低め

VBAにやらせる時も中に確実に存在する場合でなければRange型にFind使って放り込む事が多いかも
Is Nothingで見つからない場合でも処理が止まらずに弾けるし

374 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 16:23:38.63 ID:iKRuQHQv0.net]
あごめん>>364かと思ってた

処理が止まらずにってのすごい大事だよなぁ

375 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 16:30:18.62 ID:6uQRu7X1M.net]
>>370
364だけどVLOOKUP使えるならVLOOKUP
そうでなきゃINDEX+MATCH
大抵そうじゃないの?

376 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 16:51:12.87 ID:JSJMRLhD0.net]
ある行を内容の変更は自由にできるけど削除できないようにすることはできますか?

377 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 17:26:53.27 ID:rp73utgy0.net]
それ、ここでする質問?

378 名前:デフォルトの名無しさん [2021/10/10(日) 17:53:50.05 ID:19DRUExW0.net]
>>372
削除を感知して、
https://kirinote.com/excelvba-row-event/

削除されていれば
appliction.undo
ってのはどうだろうか

379 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 18:04:32.90 ID:u+pPz2Uo0.net]
ゴミみたいな回答ばかり

380 名前:デフォルトの名無しさん [2021/10/10(日) 19:05:42.11 ID:eL4HRu610.net]
じゃあ、ゴミじゃない回答よろ



381 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 19:35:34.55 ID:rFwRYXWV0.net]
「削除できないように」というのが:
・「セルや行の削除をできないようにしたい」→シートの保護で対処
・「値の変更はできるが消去(空欄に)できないようにしたい」→入力規則で対処

382 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 20:12:04.54 ID:eL4HRu610.net]
対処の方法がわからないのかと思ったら、対処する方法があるのかどうかの質問だったのかw

383 名前:372 mailto:sage [2021/10/11(月) 00:26:21.39 ID:Z2LLk70Q0.net]
>>377
シートの保護で削除不可を選んでも全ての行が削除不可になること,またセルの内容変更もできなくなるので希望に合いません.
374さんのやり方をVBA画面をで書くしか無いですかね

384 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 14:09:59.80 ID:7nZn8gcC0.net]
>>379
保護する前に行選択しておけばいいやん
任意の場所だけ編集不可にできるよ

385 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 14:59:32.76 ID:Z2LLk70Q0.net]
>>380


> 任意の場所だけ編集不可にできるよ
編集不可ではなくって、編集可で削除不可にしたいんです。

386 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 18:57:29.54 ID:nQqo0+vnM.net]
空白に編集する場合とかどう取り扱うつもりなんだろう

387 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 20:49:58.25 ID:SLAXBehE0.net]
クビか配置転換したほうがよいかと

388 名前:デフォルトの名無しさん [2021/10/11(月) 21:18:23.92 ID:oro4FUng0.net]
馬鹿でもある程度作れてしまうからダメなんだよな

389 名前:デフォルトの名無しさん mailto:sage [2021/10/12(火) 18:51:44.09 ID:F8L1eENx0.net]
それを求める環境が悪い

390 名前:デフォルトの名無しさん mailto:sage [2021/10/14(木) 18:44:35.26 ID:FbYeSmKT0.net]
空白は削除じゃないんじゃね



391 名前:デフォルトの名無しさん mailto:sage [2021/10/14(木) 19:05:30.78 ID:DEjpZ/5cr.net]
メーカー開発設計だけど実験データ処理とかで
なれないながら頑張ってvba使ってるけど
試行錯誤で調べながらだからあんまりシート使ってるときと比べて効率化できてる気がしない…
でもシートでチマチマするよりは知的労働してる気がするし
いつかのペイオフを期待するわ

392 名前:デフォルトの名無しさん mailto:sage [2021/10/14(木) 20:42:17.77 ID:BHqqoV+20.net]
あるレベルを超えると突然やりたいことはこうやりゃいいじゃんってなってバリバリ書けるようになる

393 名前:デフォルトの名無しさん [2021/10/14(木) 22:26:04.22 ID:FxTzsGq40.net]
set覚えてオブジェクトの概念覚えてイベントを理解してしばらくするとほぼ全ての場面で対応できるようになる

394 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 06:17:54.01 ID:YCIon6in0.net]
色々覚えて余計な知識が付いてきて、
これはもっと綺麗に書けるんじゃないか?っていう欲が出て進まなくなる事が増えたんだけどどうすりゃいいのか
今までは明らかに冗長で読みづらいコードが多かったけど、生産性で見れば高かったように思う

特にプログラミング自体に興味が出てきて他の言語の記事も見るようになって、
そこで得た知識をVBAで無理に再現しようとしてドツボに嵌る事態も多いように感じる

395 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 07:30:19.61 ID:xvvRRo/+0.net]
>>390
まず単一責任原則に沿って作るといいよ。
つらつらとコードを一直線に書くんじゃなくて、
役割に合わせてメソッドや関数を作って
それを部品として組み立てて行くイメージ。

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

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

ただ、VBAでは自分一人で使うんであれば
それでいいけど、後々人が見たり手を入れたり
することを考えると、やり過ぎると
そもそもその辺の概念を理解していない
人が多いからね。自分以外誰も触れない
オナニーコードの完成だよ。
その辺は気を付けないとね。

396 名前:デフォルトの名無しさん [2021/10/15(金) 07:53:52.36 ID:i1GdH9Fr0.net]
>>390
字の練習と同じ
納得できるまで、何度も綺麗に書き直せば良い
その内、早く綺麗に掛けるようになる
「もう少し綺麗に書けそうだけど時間かかるから諦めよう」の判断も出来るようになる

>>391とは逆だけど、vbaの場合は関数やモジュールはあまり分けなくても大丈夫だよ
他の言語だと10行超えたら別モジュール、なんて言われる事もあるけど
vbaだと単一モジュール・単一関数で終わる方が見やすい事も

397 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 08:56:32.98 ID:Ob8xTIA6M.net]
メソッドが3つ以上にできそうなときはクラスを検討する

398 名前:デフォルトの名無しさん [2021/10/15(金) 09:22:10.96 ID:Y66b/sjXM.net]
美しさより速さだよ
最初の頃は両立するが(無駄なSelectなど)
次第によ醜くなっていく

399 名前:デフォルトの名無しさん [2021/10/15(金) 10:10:42.08 ID:Sjupi756F.net]
もう3年くらいExcel使ってないけど全然困らないωωω

400 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 11:34:26.87 ID:r1bpZsgJ0.net]
ふーん



401 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 20:36:17.72 ID:WLz9ti2OM.net]
>>395
なんでこのスレに居るの?

402 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 21:42:47.27 ID:YCIon6in0.net]
>>391,392
ありがとう

分けた方がスッキリするんだけど、
分けすぎると逆に関数があっちこっちに分散してどれが何に使われているのか分かり辛くなる
そういう時に「どこまで分けるか」っていう塩梅はどういう基準で決めてる?

403 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 22:02:32.86 ID:xvvRRo/+0.net]
>>398
役割。
モジュールもメソッドも全てに役割分担を持たせてキチンと仕舞うべき場所に仕舞っておく。
だからその役割を行う為なら100行になろうが1000行になろうがそのメソッドに記載する。

何を持ってしてひとつの役割とするかは作る人のセンスに掛かってくるから場数をこなして慣れるしかないかな。

404 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 22:06:51.27 ID:xdjJa8Ad0.net]
>>398
変数や関数名や引数である程度分かるようにする
それでも迷うようならコメント付ける

405 名前:デフォルトの名無しさん [2021/10/16(土) 13:55:14.29 ID:Hx8OP0An0.net]
>>398
> 分けすぎると逆に関数があっちこっちに分散してどれが何に使われているのか分かり辛くなる
関数にカーソル合わせて「Shift+F2」で定義箇所に飛べるよ
https://www.wordvbalab.com/code/2925/

まあ言語自体も開発環境も貧弱すぎるからまとめたくなっちゃう感覚はわかるけど []
[ここ壊れてます]

407 名前:デフォルトの名無しさん [2021/10/16(土) 16:39:05.71 ID:EZGI4ZK10.net]
調べてもわからないのでお聞きしたいです

下の処理で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

408 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 16:51:56.90 ID:a6cW1Kja0.net]
test3()なのにcallで引数渡そうとしてる

409 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 17:03:21.91 ID:cq/EQnSr0.net]
VariantにはArrayとかも入るから ()付けても書式エラーにはならないのかな

410 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 17:06:32.68 ID:eJomN4xc0.net]
>>402
test3()は引数がないのに引数をわたそうとしている。

test3()は関数なのにy=test3(x)という構文ではなくてcallでtest3()を呼び出しいる。



411 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 17:09:51.40 ID:cq/EQnSr0.net]
test3の実行後にエラーになるのがこの質問のミソだと思うよ

412 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 17:43:21.23 ID:nAOL9IkjM.net]
>>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

413 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 18:35:14.73 ID:Pp6vdwK70.net]
確かにこれではtest3は動かない

414 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 18:36:14.79 ID:njPM+lzE0.net]
>>402
test3まで処理が正常に行われたなら気にしなくていいんじゃね

415 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 18:46:34.14 ID:m1u7MgLp0.net]
ステップ実行させたら確かにtest3実行するな
こんなのコンパイルエラーで良いと思うんだが、なかなか興味深い

416 名前:デフォルトの名無しさん [2021/10/16(土) 18:57:45.79 ID:EZGI4ZK10.net]
ありがとうございます!
test3はsubでよかったんですね。
参考にしながらいろいろ試したらできました。
すごく助かりました。

417 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 19:30:00.02 ID:m1u7MgLp0.net]
いや、問題は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

とかで動くだろ

418 名前:デフォルトの名無しさん [2021/10/16(土) 20:00:16.92 ID:EZGI4ZK10.net]
>>412
ありがとうございます。すごく勉強になりました。

419 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 21:23:47.08 ID:aQ5UbG+6a.net]
最終の答え得るためにいくつの関数に分けるか、というのはどうやったら身につくんでしょうか

420 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 21:32:26.89 ID:a6cW1Kja0.net]
分けたくなったら分ければいい

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

寝起きのルーチンとしてトイレ歯磨きをセットとするとか
無い時もある食事デンタルフロスをセットとするとか
歯磨きが先なのは寝起きで飲み食いが嫌で個人的な事だから異論はあると思う



421 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 21:49:34.88 ID:CDLajE+o0.net]
>>414
欲しい答えじゃないかもしれないけど

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

むやみに何でも関数にすればいいというものではない

422 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 09:01:15.98 ID:MVHP31+Wa.net]
>>415
>>416
ありがとうございます。
手続き型しか書けなくて、ダラダラ長くなってしまうのが少し気になり始めてしまって、見やすいシンプルなコード見ると、どうしたらこういう考え方できるのかなと。
実験的にもいろいろやってみます。

423 名前:デフォルトの名無しさん [2021/10/17(日) 11:37:36.37 ID:LVwZEVKT0.net]
別スレから来ました

A1 会社名 B1仕事の項目 C1整理番号
B1の項目に従って規定のExcelファイルを開いてA1の会社名とC1の整理番号を合体して名前をつけて保存っていう操作をしたいんだけど、これはVBAで出来ますか?
別件ですがVBAでオススメの書籍があれば教えてください

424 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 11:41:00.73 ID:Vlp9RG+s0.net]
余裕で可能

425 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 11:47:00.68 ID:rQoWwir60.net]
>>418
大分質問が上手くなったじゃないか。
ただ規定のファイルにはただ名前つけて保存するだけでいいのか?

426 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 12:11:29.02 ID:ZLWKnlAP0.net]
>>418
どこのスレから来たの?
Rubyスレかそうでないかで対応変わるんだけど

427 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 12:14:56.83 ID:rQoWwir60.net]
なんでExcelファイル操作するのにRubyスレから来るんだよ

428 名前:デフォルトの名無しさん [2021/10/17(日) 12:16:45.71 ID:LVwZEVKT0.net]
別スレから来ました

A1 会社名 B1仕事の項目 C1整理番号
B1の項目に従って規定のExcelファイルを開いてA1の会社名とC1の整理番号を合体して名前をつけて保存っていう操作をしたいんだけど、これはVBAで出来ますか?
別件ですがVBAでオススメの書籍があれば教えてください

429 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 12:18:39.23 ID:rQoWwir60.net]
頭おかしくなったのか?

430 名前:デフォルトの名無しさん [2021/10/17(日) 12:19:45.69 ID:LVwZEVKT0.net]
ブラウザバックしたら投稿した
すまない
Excel質問スレから来た

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

VBAで出来ることは



431 名前:かったのでダイマでもステマでもいいのでオススメの書籍を教えてください []
[ここ壊れてます]

432 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 12:22:55.44 ID:Vlp9RG+s0.net]
だってルビースレから来た時点で質問が目的じゃなくて
最終的にルビーコード貼り付けてどやーするのが目的の人だし

433 名前:デフォルトの名無しさん [2021/10/17(日) 13:08:15.77 ID:LVwZEVKT0.net]
ルビースレってそもそもなんなのかって状態なんだが…
この板はブラウザバックで二重投稿した程度で中傷くらったりするのか?
エクセルのVBAについて質問してるのに全然違う答え返ってくるし

434 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 13:55:19.97 ID:l76d9bPwM.net]
ニヤニヤ

435 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 14:58:05.05 ID:OE8yqt320.net]
>>425
自分で本屋に行って内容を確認しようとは思わないのか?

436 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 15:24:33.87 ID:rQoWwir60.net]
>>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

437 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 15:26:59.96 ID:Vlp9RG+s0.net]
あーあルビーキチガイに無駄なエネルギー使ってる

438 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 15:28:04.20 ID:XdTFVkom0.net]
ツンデレで草

439 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 16:11:59.85 ID:lULOB+dMM.net]
>>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
って書かないのか不思議だ

440 名前:デフォルトの名無しさん [2021/10/17(日) 19:08:06.14 ID:F19IWtWk0.net]
>>433
単に返り値がopenしたbookであることを知らないだけだと思う
俺も昔は前者みたいな書き方してたな



441 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 19:23:15.59 ID:6d2YQk+QM.net]
なるほど、結構基本的なことだと思ってたけどそうでもないんかな
シートでも Worksheets("sheet1").~ って書いてる人をよく見る

442 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 19:27:41.57 ID:rQoWwir60.net]
>>433
わたすもまだ今年から始めたド素人なもので…。参考になります。
>434の言うとおり戻り値がそんなだなんて知らなかったんだよう。

443 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 19:29:03.49 ID:QrrwaG0ad.net]
後続の処理でworkbookオブジェクトを使わないならWithで纏めちゃうな

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

こんな感じで

444 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 19:31:49.54 ID:rQoWwir60.net]
>>437
一行ごとに処理書いてる感なくてスマートでええな。

445 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 21:41:34.16 ID:TEYo+ExJ0.net]
Withは便利だけど積極的には使わない派
後で見返す時にわけわからなくなるから

446 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 21:43:33.55 ID:80TNtCCb0.net]
ネストしたwithを見たらエディタ閉じるわ

447 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 21:48:12.01 ID:eFAt1kMMd.net]
俺は>>437と同じ
オブジェクトを変数に入れずにWithに直接ぶっこむ派
DimとSetの行がなくなるから入力の手間も減るし狭い画面でソースが見やすくなる

448 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 21:51:58.87 ID:W9ZcRzM1M.net]
扱うオブジェクトが1つならいいけど複数あったりサブルーチンに渡したりする時もあるから

449 名前:デフォルトの名無しさん [2021/10/17(日) 22:22:04.64 ID:F19IWtWk0.net]
withはネストするとトタンに見にくくなるよね
>>437ぐらいなら見やすいと思うけど、>>439と完全に同意見だわ

450 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 00:37:42.11 ID:48un5MBo0.net]
以前VB6スレでもWith Newを使ってる人がいて論議になったことがあったね。

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

ただこの方法であまり長いロジックを組むのは確かに可読性に宜しくないのも同意。
だから使いどころに気をつけながら使う方法だと思うよ。



451 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 00:52:44.24 ID:5AqMk2S7d.net]
オブジェクトを抱えるWithはSubやFunctionとセットで使うんだよ
1つのSubには一つのWith
それ以上になる時は機能を詰め込みすぎだから分割すべき

452 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 01:37:56.48 ID:Zxhiy8zv0.net]
https://ro69-bucket.s3.amazonaws.com/uploads/artist_image/image/2282/width:600/resize_image.jpg

453 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 07:58:42.77 ID:Xmojsja+0.net]
複数のファイルじゃなくて複数のフォルダを選択する方法はありますか?

454 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 08:17:54.78 ID:iA8avgoCM.net]
>>447
vba 複数フォルダ選択
でググればいくらでも出てくる
https://stabucky.com/wp/archives/1507

455 名前:デフォルトの名無しさん [2021/10/19(火) 05:36:51.83 ID:s00hPK6/a.net]
クリックする

456 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 13:51:25.65 ID:DDPhMqNbr.net]
パワポもvbaで操作している人はいますか?
また手っ取り早く時短できる部分はありますか?

457 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 14:28:41.78 ID:P0vvwNoGM.net]
>>450
Excel のデータを50枚ぐらいにスライドに整形して表示するって言うのをVBAでやったよ

458 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 16:06:34.91 ID:DDPhMqNbr.net]
>>448
リンクにあるのはフォルダじゃなくてファイルについてですね。。。
どうやらファイルは複数選択できるけどフォルダはできないっぽいですね。。。

459 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 16:21:20.09 ID:4aO6vjST0.net]
>>452
横槍だけどリンク先ちゃんと下まで読んだ?

460 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 16:32:01.94 ID:wN2ah2c70.net]
全くの初心者です

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

検索してみてそれっぽいコードを実行してみましたが上手く行かないか1004のエラーが出てしまうので、できれば教えていただきたいです



461 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 17:37:09.15 ID:4z76YikWM.net]
>>454
まずは自分で作ったプログラムをここに貼って

462 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 17:40:33.12 ID:mCqSTcWyM.net]
>>454
流石にエスパーじゃないからそれだけの情報じゃなんとも言えんが、
ファイルの指定が間違ってる可能性がありそう
エラーが出たときにデバッグってボタン押したらどんな命令文の背景が変わってる?
省略しないでその文を一字一句違わず書いてみ?

463 名前:デフォルトの名無しさん [2021/10/19(火) 18:02:38.90 ID:ukSaGu280.net]
実行してるファイルと同じ名前はダメだろ

464 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 20:26:31.01 ID:DOUatBbL0.net]
>>457
元のファイルがあるフォルダーのサブフォルダーに格納されるんで同じ名前でも大丈夫だよ。

465 名前:デフォルトの名無しさん [2021/10/20(水) 00:29:04.94 ID:P5tYW80ga.net]
質問者の勘違いとエスパー

466 名前:オたんじゃね []
[ここ壊れてます]

467 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 00:47:36.84 ID:Xbyc9Pekd.net]
わたしは、エスパー
今、質問者の脳内に、直接、回答を送っています
わたしは、エスパー

468 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 00:49:43.99 ID:Xbyc9Pekd.net]
残念です
夜中なので、質問者は、寝てました
残念です

469 名前:デフォルトの名無しさん [2021/10/20(水) 00:53:24.04 ID:VLQwVQRS0.net]
なぜプログラム板でExcelVBAのスレが活発なのよ?
日本終わってんな

470 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 03:43:52.55 ID:gq1XFNWx0.net]
労働者の多くがExcel使ってんだから需要からしたら普通だろ



471 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 06:13:11.55 ID:RXqG14DY0.net]
まぁ年収ランキングとしてもそこそこ高い位置にいるし当然と言えば当然だな
https://xtech.nikkei.com/atcl/nxt/column/18/01068/111100004/

472 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 10:35:33.40 ID:Nii7YXA70.net]
>>462
なんでRubyスレにいかないの?

473 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 10:37:34.01 ID:cqpH7rMEd.net]
プログラマーじゃない人もたくさん使ってるから
人が増えるのは必然

474 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 17:58:56.42 ID:DdoeWcxm0.net]
>>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にしたりすればできるかな?と思ったのですが上手く行かずです…

475 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 18:30:57.52 ID:3UsBchoVM.net]
ThisWorkbook.Pathにはケツの¥が付いてないから
ThisWorkbook.Path & ”¥” & FolName & “\” & FilName
に書き換えてみ

476 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 18:49:10.89 ID:YqKlvam70.net]
\
"
半角にしてね

477 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 20:45:15.20 ID:Es2OjjC60.net]
>>467
お前のPCにK:ドライブは存在するのか?
とりあえず
wb.SaveAs のまえに、
MsgBox hozonPath & FolName & “\” & FilName
いれて、表示された内容をかけ

個人名とか入ってたら適当に隠せよ

478 名前:デフォルトの名無しさん [2021/10/20(水) 22:22:06.11 ID:mCILNp7G0.net]
超初心者です 

以下の対応をさせたいです
@シートを支店分だけ増やす
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

479 名前:471 [2021/10/20(水) 22:24:48.55 ID:mCILNp7G0.net]
Cは「B列が"0"になっている行を削除する」の誤りでした

480 名前:デフォルトの名無しさん [2021/10/20(水) 22:37:03.53 ID:SCNNHF4n0.net]
とりあえずここだと思う
下の方はサンプル作ってくれれば試すけど、手元にないからよくわkらん

Sub シート作成()
For Each 支店名 In Worksheets("支店一覧").Range("A2:A18")



481 名前:471 [2021/10/20(水) 22:41:41.27 ID:mCILNp7G0.net]
>>473
大変失礼いたしました
あるページからコードをコピーしてきたときに修正し忘れました
実際は名前→支店名にしていましたが、エラーとなっていました
エラーの内容の詳細が必要でしたら、明日投稿します
(現在手元にExcelファイルがなく、すみません)

482 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 23:13:32.77 ID:dYcbK4WK0.net]
安心して
手元にエクセルファイルが無いのに記憶だけでそこまで書ければ超初心者じゃないよ

483 名前:デフォルトの名無しさん mailto:sage [2021/10/21(木) 05:25:42.24 ID:wIUVM+qQM.net]
>>474
> エラーの内容の詳細が必要でしたら、明日投稿します
なぜ最初から書かないの?

484 名前:デフォルトの名無しさん [2021/10/21(木) 06:18:01.89 ID:8cr/BFDG0.net]
>>471
あと、
・どこで
・どんな
エラーになるのか書いて

485 名前:デフォルトの名無しさん mailto:sage [2021/10/21(木) 06:54:51.77 ID:MLEFHfinM.net]
Select Caseにbreakがないのは何故なんでしょうか
beakがないから最初に一致した条件以降のCaseも
実行されると勘違いしやすい
仕事で大きなトラブルを起こしてしまった…

486 名前:デフォルトの名無しさん mailto:sage [2021/10/21(木) 07:06:17.27 ID:mcI3miqCM.net]
Select Caseって上から順に見て真っ先に当てはまったCaseのみ実行じゃなかった?違うんだっけ?

487 名前:デフォルトの名無しさん mailto:sage [2021/10/21(木) 07:46:09.23 ID:Ue09v+2oM.net]
>>478
> Select Caseにbreakがないのは何故なんでしょうか
そういう仕様だから
Pascal とかと同じ

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

> 仕事で大きなトラブルを起こしてしまった…
仕事で使うならちゃんとテストしろよ…

488 名前:デフォルトの名無しさん mailto:sage [2021/10/21(木) 11:01:11.45 ID:kxdLHT3P0.net]
>>479
違うよ
Select Case の後にTrueとか書いて
Case の後にTrueとかFalseとか書くと
簡単に確認出来るよ

489 名前:デフォルトの名無しさん mailto:sage [2021/10/21(木) 11:14:41.56 ID:kxdLHT3P0.net]
>>478
これはVBAとかCase文に限らず今自分がやってる言語→ 他言語に切り替える際には何か違う挙動するなー、て言うのはあるあるなことだからまぁいい勉強になったって思うべきだね。

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

その言語仕様を嘆くよりそういったこともあるって次回に生かした方が幸せになれると思うよ。

490 名前:デフォルトの名無しさん mailto:sage [2021/10/21(木) 12:11:34.23 ID:8w0PnAXQ0.net]
select case 普通に動作するんだが、どうやったらトラブル起こせるんだ?



491 名前:デフォルトの名無しさん mailto:sage [2021/10/21(木) 17:55:34.88 ID:88nPUo+s0.net]
>>470

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


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

やはりエラーが出ます、

492 名前:デフォルトの名無しさん mailto:sage [2021/10/21(木) 18:43:47.31 ID:mcI3miqCM.net]
だからhozonPathとFoINameの間に¥を入れろって

493 名前:デフォルトの名無しさん [2021/10/21(木) 21:55:14.75 ID:fbrP1i9b0.net]
>>484
お前みたいな馬鹿にはVBAは無理だと思うよ

494 名前:デフォルトの名無しさん [2021/10/21(木) 22:14:08.48 ID:8cr/BFDG0.net]
>>484
最強料理はケバブ

495 名前:デフォルトの名無しさん [2021/10/21(木) 22:16:16.48 ID:8cr/BFDG0.net]
コピペ間違えた

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


あと
FolderName
を無理に
FolName
と変に略すと、あとで何書いてるかわからなくなるぞ。

496 名前:デフォルトの名無しさん mailto:sage [2021/10/21(木) 23:15:26.60 ID:5CobycYg0.net]
パス区切りに、/ は使えないの?

例えば、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" ]

497 名前:デフォルトの名無しさん [2021/10/22(金) 00:34:42.64 ID:2cM8PEAKa.net]
やってみればわかるんじゃないの?

498 名前:デフォルトの名無しさん [2021/10/22(金) 00:44:00.08 ID:1RQkewhE0.net]
あまりに馬鹿過ぎると思ったらやっぱりruby馬鹿か

499 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 00:46:54.73 ID:5YslU4UB0.net]
>>484
何をやりたいのかよくわからんけど、連続して2回以上実行すると、実行回数分のネストしたフォルダが必要になるのでエラー吐く。
あと、コピー先のフォルダ/ファイル名はActiveSheetを参照しているので、複数ブック開いていたりするとおかしなことになる。

500 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 01:17:15.93 ID:MBOrFbAX0.net]
>>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



501 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 01:25:21.34 ID:MBOrFbAX0.net]
>>493
ドライブない時に終了させるの忘れてた

502 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 07:57:46.72 ID:uyzrt+dja.net]
ユーザーフォーム自体(コードではなくてボタンとかが表示されている方)を印刷する時、
デフォルトで用紙が縦になるんですが、横に出力する方法はないでしょうか?

503 名前:デフォルトの名無しさん [2021/10/22(金) 09:34:10.25 ID:EjatPKif0.net]
>>495
Windowsの設定(コンパネ)のプリンタで用紙設定しておく

504 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 12:17:25.64 ID:uyzrt+dja.net]
あー、あの縦か横かをオプションボタンで選ぶ画面ですね。
VBA以前の問題でした。失礼しました。
帰宅したら試します。

505 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 19:20:10.02 ID:eWxCtPi7a.net]
横1列に並んだセルを
A B C D E F
1 あああ いいい ううう 阿嗚呼 伊井伊 雨右鵜
2 かかか ききき くくく 可化歌 機器機 久々九
3

A B C
1 あああ いいい ううう
2 阿嗚呼 伊井伊 雨右鵜
3 かかか ききき くくく
4 可化歌 機器機 久々九
のように1行飛びに成形するにはどうしたら良いですか?

506 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 19:23:55.44 ID:mTcFiW+U0.net]
頑張ってコピペしろ

507 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 19:26:54.87 ID:cisRZQTm0.net]
>>498
一組が1行✕6列からなるセル範囲を別シートの
2行✕3列に出力するマクロでいいのでは?

508 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 20:37:51.08 ID:pZfGL40n0.net]
こういうの自力でできないようじゃ教わってもしょうがないんじゃね

509 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 20:47:03.46 ID:Fa1Ohywp0.net]
>>493
ありがとうございます。満足いく挙動になりました!

510 名前:>>498 mailto:sage [2021/10/22(金) 22:34:54.56 ID:0NScRLlYa.net]
>>499
現状頑張ってコピってます
>>500
ありがとうございます
もちろんDBから引っ張って来たシートとは
別の印刷用シートのセルに=で参照させるんですが・・
マクロの記録を頼りにしてみます
>>501
自力で・・



511 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 22:59:58.93 ID:4e59Jt0n0.net]
関数でできる
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))

512 名前:デフォルトの名無しさん [2021/10/22(金) 23:08:32.12 ID:Jvo+jO0O0.net]
>>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

513 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 23:11:35.60 ID:Jvo+jO0O0.net]
おっと
ちょい間違い

どこ間違ってるか探してみて

514 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 23:21:55.85 ID:MBOrFbAX0.net]
>>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

515 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 23:34:57.82 ID:MCKX1YxAa.net]
>>504
偶数奇数の数列ですね!ありがたやー
>>505
んー データシートの消し込みって一般常識なんですかね?
まっコメントアウトするだけだし
 iとjが逆かな? でもなんとかなりそう!
ありがとうございましたア!

516 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 23:40:58.45 ID:rmoybpwYa.net]
>>507
プログラムは作業の手順書とはいえ
>>505さんのクラスモジュールを使うだとか
ユーザー定義型変数を使うという発想に至りませんで・・・
皆様ありがとうございました。

517 名前:デフォルトの名無しさん [2021/10/23(土) 02:07:03.33 ID:3lNDidpi0.net]
いつものあいつ

518 名前:デフォルトの名無しさん mailto:sage [2021/10/24(日) 01:40:51.53 ID:BvAAjUlj0.net]
>>498
G列に上から1,2と入れて、さらに下方のデータの無いG列に1,2とコピペする
表全体を選択してフィルターを適用。G列でソートする
以上で一行ごとに空行が挿入される
つづいてD1:F2を選択、コピー
A2に形式を選択して貼り付け(空白を無視する)
出来上がり

519 名前:デフォルトの名無しさん mailto:sage [2021/10/24(日) 02:32:09.51 ID:k5qcq0CGa.net]
>>511
別解ありがとうございます
テンプレートファイルがあればそれで良いかもしれませんね

520 名前:デフォルトの名無しさん mailto:sage [2021/10/24(日) 10:50:30.38 ID:m64p+skw0.net]
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



521 名前:デフォルトの名無しさん mailto:sage [2021/10/24(日) 10:52:43.48 ID:m64p+skw0.net]
>>513
自己レスです。
スクリンショットのリンク先を間違えました。
https://imgur.com/qJeXnl9
が正しいです。

522 名前:デフォルトの名無しさん [2021/10/24(日) 12:20:50.22 ID:LZG5kY/b0.net]
普段よく使う色んな独自マクロ機能を右クリックメニューに登録して、
どんな時にも使えるようアドインファイル(.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した
ファイルが作成されてしまいます。

これを解決する方法があれば、教えてください。

523 名前:デフォルトの名無しさん mailto:sage [2021/10/24(日) 14:29:28.09 ID:phaY1aKk0.net]
ひとつのシートボタンだけ
まとめたほうが楽じゃないの?

524 名前:デフォルトの名無しさん [2021/10/24(日) 14:39:49.48 ID:DK1tlC+k0.net]
>>513
他ソフトのショートカットと干渉してる可能性がある
例えばalt+F11はGeforceとかぶって使えなかったりする。めんどい

525 名前:デフォルトの名無しさん [2021/10/24(日) 14:40:27.40 ID:DK1tlC+k0.net]
>>513
問題の切り分けとして、
Ctr+Shift+F
をCtr+Shift+KなりCtr+Shift+Uなり、色々試してみて

526 名前:デフォルトの名無しさん mailto:sage [2021/10/25(月) 13:04:03.44 ID:wahm2g0s0.net]
>>517,518
有難うございました。
Ctr+Shift+Uは干渉しませんでした。
Ctr+Shift+FとCtr+Shift+Iが他のアプリに割り振られているようです。
Ctr+Shift+Fはそのアプリの設定を外すことができました。
Ctr+Shift+Iは外す方法が見つかりませんので別の組み合わせに変更します。

527 名前:デフォルトの名無しさん mailto:sage [2021/10/25(月) 21:49:13.26 ID:YikV54AJ0.net]
ショートカットに拘るのが
わからん

528 名前:471 [2021/10/26(火) 13:17:41.14 ID:NeMLM07o0.net]
>>471,472,474です。
間があいてしまい、申し訳ございません。

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

こちらで「支店一覧」をみるかぎりではおかしなところはみあたりません
(もちろんA2:A18に重複もありません)

529 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 14:40:57.52 ID:geAm6QgM0.net]
「この名前は既に使用されています。」って言ってんだからそのシートが存在するんでしょ。見当たらないなら非表示になってるか

530 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 15:44:08.87 ID:W8WFYMpad.net]
以下の処理について質問です
「条件→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しか使えないためこのようなやり方をしたのですが、もっと適切な方法があれば教えて頂きたいです。



531 名前:471 [2021/10/26(火) 15:50:27.98 ID:NeMLM07o0.net]
>>522
非表示でもないです
そもそも「原本(2)」という名前のシートがなぜ作成されるかも謎なんです
(「原本」があるので、「原本(2)」が作成されるときに記載のエラーになるのでは
と推測しています)

532 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 16:18:01.43 ID:Uox0HVAS0.net]
>>520
ショートカット以外だとリボンにカスタム登録するしかないけどいちいちマウスを使うと
キーボード操作の流れが途切れる。

533 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 16:35:47.94 ID:cmR9o8NP0.net]
そりゃ原本ってシートをコピーしたんだから原本(2)って名前のシートができるだろ

534 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 17:04:12.98 ID:geAm6QgM0.net]
>>523
連番をカウントする変数を3つ作ればいい

535 名前:471 [2021/10/26(火) 17:28:50.64 ID:NeMLM07o0.net]
ほんとバカですみません、、、
自分が嫌になります
それなのにみなさま返信有難うございます

追加ですみません
支店名シートの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

536 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 17:29:10.65 ID:W8WFYMpad.net]
>>527
分かりませんでした!もう少し詳しく教えていただけないでしょうか!

537 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 17:39:37.61 ID:geAm6QgM0.net]
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
みたいな

538 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 22:18:39.74 ID:GuH7IxvP0.net]
>>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

539 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 22:19:38.61 ID:GuH7IxvP0.net]
暇だから書いたけど、実際やるなら>>530みたいなので済ます戸思う

540 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 23:37:03.27 ID:HhcOopAn0.net]
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



541 名前:デフォルトの名無しさん mailto:sage [2021/10/27(水) 00:02:27.06 ID:d3yRZmnd0.net]
条件付き書式でいいんじゃね

542 名前:デフォルトの名無しさん mailto:sage [2021/10/27(水) 00:17:15.91 ID:PN2o+9fe0.net]
条件付き書式でいいが、どうせVBAでやるなら入力のたびに書式をクリアしてから再設定する方がいいよね

543 名前:デフォルトの名無しさん mailto:sage [2021/10/27(水) 19:45:59.71 ID:DgEx7n5q0.net]
条件付き書式がいいんじゃないかなぁ

544 名前:デフォルトの名無しさん mailto:sage [2021/10/27(水) 20:46:04.85 ID:Pols7qyl0.net]
>>533
If Range("D1").Value <> "" Then
あとはChangeイベントにする

545 名前:デフォルトの名無しさん mailto:sage [2021/10/28(木) 11:45:30.63 ID:WDBBEMQR0.net]
コードを一括エクスポートするアドインでおすすめのってないですか?
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

546 名前:デフォルトの名無しさん mailto:sage [2021/10/28(木) 11:50:21.99 ID:WDBBEMQR0.net]
>>538
できた!これから手順を書いていく。

547 名前:デフォルトの名無しさん mailto:sage [2021/10/28(木) 12:12:13.13 ID:WDBBEMQR0.net]
>>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]ボタンを押してアドインウィンドウを閉じる。

[開発]タブ内の右端に[エクスポート][選択エクスポート]が現れる。

548 名前:デフォルトの名無しさん [2021/10/28(木) 16:45:24.43 ID:IU5+Uq0S0.net]
Excel 2019
「オプション」−「詳細設定」の「グラフィックアクセラレータを無効にする」のチェックを
VBAで設定するにはどうすればいいでしょうか?
AccessだとApplicationのSetOptionやGetOptionでできるんだけど、
Excelには見当たらないのでよろしくお願いします。

549 名前:デフォルトの名無しさん mailto:sage [2021/10/28(木) 19:13:26.37 ID:t5V0CZ4Da.net]
https://ja.play-and-more.com/4226-turn-off-hardware-graphics-acceleration-office-2013
ハードウェア アクセラレータ―の設定については、
Excel と Word の設定が連動しているので、
Excel のオプションから設定を変更することで
Word 側にも設定を反映することはできます。

550 名前:デフォルトの名無しさん mailto:sage [2021/10/28(木) 20:43:34.51 ID:rkEXdrl2d.net]
>>530
>>531
ありがとうございます!
別のケースに応用できるのでありがたいです!



551 名前:デフォルトの名無しさん mailto:sage [2021/10/29(金) 13:13:50.85 ID:A+QIge6G0.net]
同じpersonal..xlsbを複数の端末で使いたいので xlstart フォルダーから同期フォルダーに移動し
xlstart フォルダーではかわりに同期フォルダー内のpersonal.xlsb へのショートカットを置きました。
期待通り起動時にpersonal.xlsbを読み込みますが毎回マクロの実行許可を求めるので面倒です。
マクロ有効ファイル一般の仕様であることは理解しておりますが、特定のマクロファイルのみ確認を省略するか、
またはxlstart内にpersonal..xlsbにおいたまま同期する方法はないでしょうか。
xlstartフォルダー自身を同期フォルダーに設定することも検討しましたが、
googlドライブの場合は同期フォルダーは全てGドライブに移動するので
xlstartフォルダ自体が自動実行できなくこと、またpersonal.xlsb起動時にマクロを有効にするか確認
がはいり解決になりません。

552 名前:デフォルトの名無しさん mailto:sage [2021/10/30(土) 12:52:49.36 ID:MclRPTdP0.net]
>544
信頼できる場所に追加するとか、デジタル署名付けるとかしたら行けるんじゃ?
しらんけど

553 名前:デフォルトの名無しさん mailto:sage [2021/10/30(土) 15:59:41.68 ID:jbS9woJL0.net]
>>545
知らんのかい

554 名前:546 mailto:sage [2021/10/30(土) 16:14:32.06 ID:jbS9woJL0.net]
>>545
personal.xlsbを信頼できるドキュメンに設定したらできました.
無礼な物言いごめんなさい.

555 名前:デフォルトの名無しさん [2021/10/30(土) 16:52:18.20 ID:u+oDsXHga.net]
ゆるさん、打ち首じゃ

556 名前:デフォルトの名無しさん mailto:sage [2021/10/30(土) 18:39:08.12 ID:jbS9woJL0.net]
めんご

557 名前:デフォルトの名無しさん mailto:sage [2021/10/30(土) 18:39:42.42 ID:q ]
[ここ壊れてます]

558 名前:+2005If0.net mailto: りんご []
[ここ壊れてます]

559 名前:デフォルトの名無しさん mailto:sage [2021/10/30(土) 18:44:01.08 ID:8M2WunKL0.net]
マンゴ

560 名前:デフォルトの名無しさん mailto:sage [2021/10/30(土) 22:30:09.59 ID:hcWJ/Uj70.net]
三兄弟



561 名前:デフォルトの名無しさん mailto:sage [2021/11/04(木) 12:18:24.94 ID:onPWkBOz0.net]
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 でクリアしてくれると思ってたんだが…

562 名前:デフォルトの名無しさん [2021/11/04(木) 12:30:43.13 ID:h43gOvN2a.net]
LとRはいいの?

563 名前:デフォルトの名無しさん mailto:sage [2021/11/04(木) 12:43:19.95 ID:onPWkBOz0.net]
ごめん、そこは単なる書き間違い
実際のコードはLで統一されとります

564 名前:デフォルトの名無しさん mailto:sage [2021/11/04(木) 13:10:37.18 ID:5T7tzysMd.net]
--ここから読む--

565 名前:デフォルトの名無しさん mailto:sage [2021/11/04(木) 16:49:49.42 ID:or1HotUn0.net]
コボル、フォートラン、LISP、VBA、、、

566 名前:デフォルトの名無しさん mailto:sage [2021/11/04(木) 19:17:22.94 ID:hoh+rIGN0.net]
>>557
色々行ったけど一つとしてものにならなかった…?

567 名前:デフォルトの名無しさん [2021/11/04(木) 19:43:59.36 ID:ipFD2P4r0.net]
エクセルでチェック表作った

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

バージョンアップしたファイル渡したのに
無視して古いファイル使ってきたり
様式ぶち壊してめちゃくちゃなファイルを提出してきて
まともなデータに成形するのに死ぬほど苦労した
ゴミ職員にたいしてブチ切れそうなんだけど
どうしたらいいですか

568 名前:デフォルトの名無しさん mailto:sage [2021/11/04(木) 19:49:57.71 ID:q8Oivabh0.net]
新しいファイル以外の提出は受け付けなければいい

569 名前:デフォルトの名無しさん [2021/11/04(木) 19:53:35.21 ID:ipFD2P4r0.net]
なるほどありがとう
このゴミ職員エクセルを魔法か何かと勘違いしてるわ
あまりに適当な仕事に腸煮えくり返る

570 名前:デフォルトの名無しさん mailto:sage [2021/11/04(木) 20:01:42.86 ID:Ghcai/Mm0.net]
>>553
jの値はどこでどうやって確認したんだ?



571 名前:デフォルトの名無しさん [2021/11/04(木) 20:21:03.55 ID:BJCJqERO0.net]
>>561
お前みたいな馬鹿が作っているからそうなる

572 名前:デフォルトの名無しさん [2021/11/04(木) 20:33:51.75 ID:ipFD2P4r0.net]
どういう状況のファイルかもわからんで煽るバカに言われてもな

573 名前:デフォルトの名無しさん [2021/11/04(木) 20:44:25.67 ID:BJCJqERO0.net]
>>564
壊されるような造りになってるのが馬鹿の証だぞ

574 名前:デフォルトの名無しさん mailto:sage [2021/11/04(木) 20:47:33.02 ID:q8Oivabh0.net]
>>561
妥協点として下位互換は残しておいて
それでも成形の必要があるやつはお断りかな

成形はあなたの仕事では無いよ
ただ提出者が楽なようにしてるだけだと思う
それは提出者が仕事してないって事だな

575 名前:デフォルトの名無しさん [2021/11/04(木) 20:49:27.77 ID:ipFD2P4r0.net]
仕方ないね。元は別の人が勝手に作った表で
おれのはその表をコピーして○がつけられるようにしたものだから

人のファイルを保護かけてガチガチに固めて私物化するわけにも行かないし
お前みたいな後先考えられないバカは
他所のファイルをガチガチに固めて属人化して批判されるんだろうけど

576 名前:デフォルトの名無しさん [2021/11/04(木) 20:51:12.58 ID:BJCJqERO0.net]
>>567
典型的な馬鹿の言い訳

577 名前:デフォルトの名無しさん [2021/11/04(木) 20:53:21.15 ID:ipFD2P4r0.net]
もう反論終わって罵倒で誤魔化すタイムか
知能指数低すぎるわ

578 名前:デフォルトの名無しさん mailto:sage [2021/11/04(木) 20:58:17.15 ID:xnqGDt6JM.net]
と、バカが申しております。

579 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 05:16:46.04 ID:UB8UVAT80.net]
>>553
そもそも

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

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

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

そういう分かりやすい質問文書くと、その過程で自己解決できたりするし。

580 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 06:16:51.41 ID:7Ov3I8ut0.net]
>>567
とは言え上でも言われている通り
違うフォーマットのものは受け付けないようにするか
触られたくないところは保護掛けるくらいしか現実的な解決策はないだろうね

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

フォーマットチェックを行うツールを作ってそのゴミ職員とやらに「これでOKとならないものは受け付けません」とやる手もあるけど、そのツール作るのにも工数は掛かるからね。



581 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 06:56:51.17 ID:UB8UVAT80.net]
>>559
>無視して古いファイル使ってきたり

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

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

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

これまで未対応の様式のファイルも修正するおせっかいをしておきながら、
「めんどくさい」と突然キレるのは最悪。
やるならやりきる、やらないなら最初からやらない。中途半端は一番ダメだからね。
もしくはVBA諦めてテキスト関連のライブラリ豊富な使いやすい言語にする。

582 名前:デフォルトの名無しさん [2021/11/05(金) 08:36:41.38 ID:KTVj1H8Jd.net]
>>559
こういう風にやれよっていう説明資料が足りてないんだろ。
自責部分は改善してして、それでも従わない奴には突き返して再提出してもらうのが良い

583 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 08:42:12.18 ID:zTls7LAZ0.net]
話を聞かない、説明を読まない、世の中の大多数はアホばかり
まあこのことに気付かないで文句ばっか言ってるのもたいがい間抜けなんだけど

現実を受け入れて、バカにも使える仕様を考えるのが仕事ってもんだ

584 名前:デフォルトの名無しさん [2021/11/05(金) 09:17:23.17 ID:KTVj1H8Jd.net]
それはまあそうなんだけど資料を揃えておけば
ひとまず相手側のせいにできるからそれを根拠に文句は言いやすいわ

585 名前:デフォルトの名無しさん [2021/11/05(金) 10:08:06.00 ID:X0+Pa++fa.net]
現場で変更するのはもとファイルが使いにくいからじゃないのか

586 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 10:16:00.53 ID:ccfSCjSv0.net]
確かにチェックつけるだけなのになぜ改変されるのか謎

587 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 10:22:26.73 ID:UB8UVAT80.net]
よく見たら提出って言ってるな。
フォーマットに整形させたファイルをマクロつかって登録させる仕組みじゃないのか。

もしかしてVBAの話ですらない?

588 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 10:25:07.86 ID:7p6i3Z7i0.net]
>>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ではなく別のもっと大きな値をとっている可能性が果てしなくでかいわ

589 名前:デフォルトの名無しさん [2021/11/05(金) 10:52:29.16 ID:KTVj1H8Jd.net]
デバッグで値確認していけばいいだけの話

590 名前:デフォルトの名無しさん [2021/11/05(金) 12:18:28.52 ID:gSvscUzNM.net]
確認した結果、言語に致命的な問題があったという研究報告だろ
異論があるなら論文で提出しろや



591 名前:デフォルトの名無しさん [2021/11/05(金) 12:19:13.47 ID:WyPtUDby0.net]
文系プログラマにデバッガ使えは酷

592 名前:デフォルトの名無しさん [2021/11/05(金) 12:24:56.88 ID:WyPtUDby0.net]
研究報告は5chで

593 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 13:48:49.56 ID:5gsLg44lM.net]
>>576
毎回一人ずつ文句を言うのもかなり面倒な作業だと思うがな
俺なら同じ時間と手間を掛けるならパソコンに向かってコーディングしてた方がいいわ

594 名前:デフォルトの名無しさん [2021/11/05(金) 17:15:34.16 ID:T1OvPNHaa.net]
作業ルールの変更は職場長の許可もらってやれよ
勝手に変なシート作ってフォーマット変えるなとか言われてもね

595 名前:デフォルトの名無しさん mailto:sage [2021/11/06(土) 09:43:33.18 ID:GqSttEtV0.net]
年末調整面倒くさい
何故に毎回フォーマットを変えるのか
いや、分かるよ、控除や税金計算が変わってるんだから仕方ないけどさ、
国には毎年キチンと高い税金納めているんだからEXCELで自動計算してくれて、それ印刷して提出すればいいくらいのもの作ってくれないのかなぁ

596 名前:デフォルトの名無しさん mailto:sage [2021/11/06(土) 09:54:07.39 ID:tOYszMkkM.net]
>>587
いや、むしろ自治体から「年末調整やっておいたから内容確認して」
と連絡メールが来るくらいのことをしてくれていいと思う

597 名前:デフォルトの名無しさん mailto:sage [2021/11/06(土) 11:02:12.05 ID:I7EssLBv0.net]
>>587
うちの会社はイントラで内容確認して問題なければ「申請する」ボタンをクリックするだけだよ
俺は嫁がパートに出てるからその年収入力が必要だけど昔に比べたらめっちゃ楽になった

598 名前:デフォルトの名無しさん mailto:sage [2021/11/06(土) 11:40:54.21 ID:FYF0HF0H0.net]
ちょっと思いて調べたらユーザー定義関数でもスピルできるんだな
今度実験してみるか

599 名前:デフォルトの名無しさん mailto:sage [2021/11/06(土) 13:59:19.77 ID:hCRiIaw50.net]
>>587
高額納税者なら会計士にたのめばええ
控除とか支給金とか、毎年新しい制度まできちんとチェックして、うちで使えるやつを教えてくれる
家族構成まで考慮して節税のアドバイスもくれるし、確実に手数料以上のメリットがある

600 名前:デフォルトの名無しさん mailto:sage [2021/11/06(土) 19:50:35.22 ID:uGoYMeGG0.net]
>>589
扶養に入っていていてもメルカリ等で得た利益を合計すると扶養から外れることがあるからな



601 名前:デフォルトの名無しさん mailto:sage [2021/11/07(日) 03:10:59.12 ID:4qrovYD50.net]
税理士のことを会計士って呼ぶやつはかなりの高齢だって聴いたことがあるわ

602 名前:デフォルトの名無しさん mailto:sage [2021/11/07(日) 06:37:50.24 ID:so93UNIl0.net]
んな奴おらん
会計士は公認会計士の事

603 名前:デフォルトの名無しさん [2021/11/07(日) 22:57:31.69 ID:XNg8pwBQ0.net]
オランダはオラんだ

604 名前:デフォルトの名無しさん mailto:sage [2021/11/07(日) 23:38:18.06 ID:V/DqJR+40.net]
シンガポールの芯がポール

605 名前:デフォルトの名無しさん mailto:sage [2021/11/08(月) 08:49:01.66 ID:3W+jmNKxM.net]
タイ米でタイ飯を炊く

606 名前:デフォルトの名無しさん [2021/11/08(月) 12:53:20.11 ID:TKWun27Sa.net]
そびえ立つソビエト

607 名前:デフォルトの名無しさん mailto:sage [2021/11/08(月) 13:31:29.26 ID:/zBQ/QG70.net]
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

608 名前:デフォルトの名無しさん mailto:sage [2021/11/08(月) 14:09:40.47 ID:syf9kZiP0.net]
StringならString * 10 とかでできる。
Longは大きさ決まってるから指定できないはず。

609 名前:デフォルトの名無しさん mailto:sage [2021/11/08(月) 16:24:53.09 ID:UsmHmtDwM.net]
>>587
前半は分かるけど、なんでそこでエクセルが出てくるんだよ

610 名前:デフォルトの名無しさん mailto:sage [2021/11/08(月) 20:42:50.40 ID:66GUt1hW0.net]
>>599
クラスつくってプロパティの代入時にチェックいれればいいんじゃね



611 名前:デフォルトの名無しさん mailto:sage [2021/11/08(月) 20:52:16.35 ID:bylJ/Cyl0.net]
>>601
数式だけでちゃちゃっと出来そうじゃん
そんなんで本格的なWebサイト作ってアクティブレポートとかではくより
このEXCELファイルダウンロードして必要なところに入力してねで終わらせた方が安上がりだし
むしろここ、EXCELVBAのスレだからEXCELにすらかすってないこと書くのってなんか気が引けるじゃん

612 名前:デフォルトの名無しさん mailto:sage [2021/11/09(火) 09:52:46.91 ID:cbbOFy6t0.net]
というか、最悪Webフォームやらにして、番号言えば参照してもらえるって感じでいいとおもうけどね
印刷とかしてもってくのめんどいし
本人確認で行くのはしゃあないとして

ま、スレ違い

613 名前:デフォルトの名無しさん mailto:sage [2021/11/09(火) 15:30:51.99 ID:SzXGWqe30.net]
>>600
TypeてVBAでできるけど、VBScriptだとできないんだな。
やりたいことは全銀フォーマットをCSVにしたかったんだけど、別のやり方でやったわ。

614 名前:デフォルトの名無しさん mailto:sage [2021/11/10(水) 22:53:12.24 ID:lHaNkZWD0.net]
>>605
それ普通じゃん

615 名前:デフォルトの名無しさん mailto:sage [2021/11/10(水) 23:10:54.65 ID:n4nrpIYq0.net]
>>605
正規表現で一括置換すればいいだけだな。

616 名前:デフォルトの名無しさん mailto:sage [2021/11/11(木) 22:25:28.82 ID:4U2+Csw00.net]
問題を解決するやり方が複数ある場合は作る人のセンスがでる
速度重視なのか汎用性やメンテナンス、あるいはただ動けばいいとか

617 名前:デフォルトの名無しさん mailto:sage [2021/11/12(金) 07:19:28.68 ID:7noZI+XHd.net]
単に技術・経験の差が大きい

618 名前:デフォルトの名無しさん mailto:sage [2021/11/12(金) 16:46:18.75 ID:xE6WDQNQ0.net]
VBAっていうかエクセルの話題かもしれないけど、
ユーザーに入力させたテーブルがあってそれを校正するとき、
「間違っている部分」と「そこの入力形式の説明と記入例」をどうやって表示したら分かりやすいと思う?

イメージとしては「入力形式を確認する」ボタンをクリックすると
間違い場所が何らかの方法で説明されて、
ユーザーがそれを見ながら修正する感じです。

619 名前:デフォルトの名無しさん mailto:sage [2021/11/12(金) 17:12:52.04 ID:qAk4Oa1rM.net]
>>610
普通に入力規則使えば?
変なオレオレ方式作られるより慣れてて分かりやすいでしょ

620 名前:デフォルトの名無しさん mailto:sage [2021/11/12(金) 18:11:45.18 ID:xE6WDQNQ0.net]
>>611
複雑な形式(5〜10文字の英数+アンダースコア+5文字の英数の繰り返し用のような)も多数あるのですが、可能でしょうか。
GoogleスプレッドシートならSplit関数があるので捏ね繰り回せばパース出来なくはないですが・・・

ユーザー定義関数で入力規則が設定できるのかとも思ったのですが、
「指定した範囲の名前は見つかりません」と出てしまい、
そもそも関数として認識されませんでした。



621 名前:デフォルトの名無しさん mailto:sage [2021/11/12(金) 18:36:55.58 ID:grozR+8R0.net]
以下のようなマクロが組みたいです。

ファイル(以下A)が保存されているフォルダ内を検索して、特定の名前が含まれる別のエクセルファイル(以下B)を開いて、Bの各シートをシート名を指定した名前に書き換えつつAの指定の位置にシートを追加する。開いたBは閉じる。

622 名前:デフォルトの名無しさん [2021/11/12(金) 18:40:57.40 ID:KziMfQdv0.net]
>>613
そうか頑張れ
ここはお前の日記帳ではない

623 名前:デフォルトの名無しさん mailto:sage [2021/11/12(金) 19:09:57.81 ID:P++os05D0.net]
ルビー先生の自演ですね

624 名前:デフォルトの名無しさん mailto:sage [2021/11/12(金) 19:19:22.94 ID:a3j0d+bF0.net]
>>610
> 「間違っている部分」
そこにフォーカス当てるとか色を付けるとか

> 「そこの入力形式の説明と記入例」
メッセージ表示ればいいけど修整箇所がたくさんあるとウザくなるからそういうことが予想されるケースでは俺ならエラーセルに色付けしてそこが選択されたらステータスバーに表示するとかするかな

625 名前:デフォルトの名無しさん mailto:sage [2021/11/12(金) 19:56:06.94 ID:1Dl5hXGo0.net]
>>612
正規表現だろうな

626 名前:デフォルトの名無しさん mailto:sage [2021/11/12(金) 19:59:42.26 ID:USYnrtRo0.net]
正規表現って言うと卑猥なことを言ってるような気がして口では説明しにくい

627 名前:デフォルトの名無しさん mailto:sage [2021/11/12(金) 20:24:37.20 ID:Ncd0depJM.net]
可愛い女子後輩が「せいきひょうげん教えて下さい!」なんて言ってきたらそれだけで射精してしまうよな

628 名前:デフォルトの名無しさん mailto:sage [2021/11/12(金) 21:37:44.97 ID:Bm/JCeux0.net]
え?何の表現?

629 名前:デフォルトの名無しさん mailto:sage [2021/11/12(金) 22:29:48.65 ID:a3j0d+bF0.net]
ここでぬいたでーたをこのせいきひょうげんでちゅうしゅつしてそこへそうにゅうしといて…

630 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 00:19:30.49 ID:IngrJLwZ0.net]
>>616
ステータスバーに書かれていると気づいてもらえるか



631 名前:どうか・・・

>>617
正規表現で入力規則に設定可能か、
自分ググってみたのですが見つかりませんでした・・・
やり方を教えてください。
[]
[ここ壊れてます]

632 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 04:21:00.05 ID:9Z7Y7eKB0.net]
>>610
色んなやり方があると思うけど
例えば小さなテーブルならOK、NGやなにがどう間違っているかの列を数式で出る欄を設けておいて
全ての行がOKならOK、そうで無ければNGと表示するセルをひとつ作って
それがNGであればなんかのボタン押したときに「入力値に誤りが有ります」的なメッセージを出す方法を使ってるところのが分かりやすかったかな。

ただこの方式だとユーザー定義関数使うとマクロ無効にされてる状態では正しく反応しないのが難点だけど。

633 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 05:16:16.94 ID:x1CN7sQN0.net]
>>622
> ステータスバーに書かれていると気づいてもらえるかどうか・・・
セルのどこかに表示するとかいいと思うよ
そこら辺は好みでどうぞ

634 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 06:02:35.99 ID:HLrAQBx/0.net]
どこに書いてあっても絶対に読まない民が43%いるから(当社調べ)
覚悟しとけよ

635 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 15:19:02.92 ID:ANEVI8Gn0.net]
>>612
ExcelVBAのスレなので
VBA(WorkSheet_Changeイベントで起動)でチェックしたら?

636 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 17:00:36.35 ID:HusEpJk10.net]
>>613
クエリでフォルダ指定すると、ファイル名一覧を取得出来るから
キーワードで絞込む。
で、インデックス列と希望する書き換えファイル名の列作ってリストにしといて、
あとはVBAで、IF FOR構文とSaveAsあたり使えば
出来るんでね?

637 名前:デフォルトの名無しさん [2021/11/13(土) 17:14:33.96 ID:bgvplZUP0.net]
>>627
ただの決意表明に何でコメントしてるの?
Ruby基地外の自演コメントですか?

638 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 11:13:54.86 ID:wYO/ump40.net]
お金が稼げるVBAを組みたいです!

639 名前:デフォルトの名無しさん [2021/11/15(月) 11:56:57.23 ID:xIS0g/4FM.net]
ハロワ行け

640 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 19:07:44.02 ID:UtsmVGsD0.net]
>>629
ソーシャルワーカーだらけで単価激減
vbaで稼ぐのは諦めろ



641 名前:デフォルトの名無しさん [2021/11/15(月) 20:28:22.57 ID:UvM84Y/0a.net]
将来の希望としての発言なら
まず稼げる力をつけてからそういう会社に就職したらいいんじゃね
あとYoutuberとかなら勝手にやればいい

642 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 21:07:01.94 ID:nN/tXQswd.net]
裸エプロンで胸を机に乗せた状態でプログラムする様子をYouTubeに上げれば稼げるかもしれんぞ

643 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 23:28:31.25 ID:UtsmVGsD0.net]
やったけど微妙だったわ

644 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 23:32:21.10 ID:OfX77+Sf0.net]
>>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" ]

645 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 03:08:02.41 ID:FNimwzj70.net]
>>634
これ思い出した
https://news.yahoo.co.jp/articles/c74cfb53262d1001291948766f2f5abceb2623b7

646 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 16:09:29.51 ID:5D9mKY7bF.net]
>>633
https://www.youtube.com/channel/UC9-eWyrUJfPJsRxtXTdx_Cg/videos

647 名前:デフォルトの名無しさん mailto:sage [2021/11/17(水) 14:18:28.93 ID:ziCKlq68a.net]
標準モジュールで、シートAから文字列拾ってシートBに転記しようとしたら、
望まぬ形でBのWorksheet_Changeを踏んだのでCaseで分けて素通りさせたんですが、
どうにもBのValueが1004エラーで書き換わっていないのにWorksheet_Changeが発動しているらしく、
なんの変哲もない「Worksheets("B").Range("XX").Value = str」が実行されません。

F8で(Changeしてないのに)Worksheet_Changeの中身だけ進む事ができますが、それが終わると元の位置に戻って再びエラーになります。
どうしたらValueを拾って貰えるんでしょうか。

648 名前:デフォルトの名無しさん mailto:sage [2021/11/17(水) 14:26:30.65 ID:vBkg6J9AM.net]
イベント無効化しろよ

649 名前:デフォルトの名無しさん mailto:sage [2021/11/17(水) 17:56:35.51 ID:3zD8SsO+a.net]
>>639
たったの2行で万事解決
ありがとうございます
Public文字列をスイッチに四方八方から切替えまくってからのこのオチは恥し過ぎる

650 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 11:22:25.43 ID:Q3OFtjIpM.net]
>>638
何が起こってて何がしたいのかまるで意味不明なんだが、>>639が回答できた事に驚き



651 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 12:48:11.85 ID:A7YSZCxr0.net]
読解力って大事だよね

652 名前:デフォルトの名無しさん mailto:sage [2021/11/19(金) 07:29:58.87 ID:HahswZdrd.net]
vba歴15年だがイベント無効化今知ったわ

653 名前:デフォルトの名無しさん mailto:sage [2021/11/19(金) 07:42:51.24 ID:tUazBZuEM.net]
それ絶対ウソだわ

654 名前:デフォルトの名無しさん mailto:sage [2021/11/19(金) 14:43:03.48 ID:0h6/N7AxM.net]
そういうのって必要になった時に調べるもんだし
今まで一度も使わなかった機能なんて色々あるだろ

655 名前:デフォルトの名無しさん mailto:sage [2021/11/19(金) 21:00:40.42 ID:o1Oq/T8x0.net]
しかしだな
15年もいじってりゃエナブルイベントのせいで無限ループになることくらいあるんじゃないの

656 名前:デフォルトの名無しさん mailto:sage [2021/11/20(土) 15:14:52.68 ID:jiw0H+C10.net]
失われた15年

657 名前:デフォルトの名無しさん mailto:sage [2021/11/20(土) 20:08:41.79 ID:TxFL/ZXr0.net]
2013でSharePointに接続する方法ない?
2019ならADOで出来るんだけど

658 名前:デフォルトの名無しさん [2021/11/20(土) 21:06:56.40 ID:4VXr5Xxs0.net]
2021ならAHOで出来るよ

659 名前:デフォルトの名無しさん mailto:sage [2021/11/20(土) 23:15:05.65 ID:MzgsRNiS0.net]
作る前に様式はこれでいいよねって事前に確認したのに、作ったあとに
やっぱりああでもないこうでもないと注文つける
簡単なコードすらまともに書けないゴミの後出し地獄にムカついてくる
じゃあてめえが作れと

660 名前:デフォルトの名無しさん [2021/11/21(日) 00:12:13.26 ID:VeOo+GZo0.net]
たかがVBAを少し書けるだけで他人をゴミ呼ばわりする馬鹿
こいつみたいな勘違いの思い上がり馬鹿はよく見かける



661 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 00:20:55.86 ID:9y2yNJe30.net]
わざわざ作業やり直したくないから様式を事前に確認したのに後出しで人の作業増やすやつをゴミ呼ばわりして何が悪いのかな
お前も後出しで人の作業量増やしそう

自分でやるなら好きなだけ後出ししていいけどな。できないでしょ

662 名前:デフォルトの名無しさん [2021/11/21(日) 01:55:02.67 ID:VeOo+GZo0.net]
相手の要求を理解して指摘される前に用意しとくものだろ
馬鹿は言われたことしかできないから馬鹿だっての

663 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 02:07:24.62 ID:9y2yNJe30.net]
提示した仕様に対してOKが出てるのに
勝手に仕様追加しとけって?キチガイですかね

664 名前:デフォルトの名無しさん [2021/11/21(日) 02:12:33.23 ID:VeOo+GZo0.net]
相手のレベルに合わせて打ち合わせできないから馬鹿だっての

665 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 02:16:27.01 ID:9y2yNJe30.net]
様式見せてるのに相手のレベルもクソもないんだがねキチガイくん

666 名前:デフォルトの名無しさん [2021/11/21(日) 02:17:32.02 ID:VeOo+GZo0.net]
馬鹿は相手が理解しているかどうかすらわからないから馬鹿だっての

667 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 02:19:43.87 ID:9y2yNJe30.net]
相手は様式を理解した上で後出しの思いつきで仕様変更要求してきたんだよ
馬鹿なお前にはこんな簡単な日本語すら理解できないんだろうけど

668 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 04:43:02.55 ID:YN582lotM.net]
議事録なり議事メモなりで決定会議や打ち合わせの記録を残しておかないと後で後悔する

669 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 05:13:42.45 ID:V2WgyX4h0.net]
議事録だろうが録音だろうが無駄
レベルの低いやつってのは、簡単に前言を撤回して主張を変えてくる

670 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 06:09:13.16 ID:CsAuHtPC0.net]
つまり契約概念を理解しない客なわけだ。そんな客は契約は契約ですかと突っぱねて二度と相手にしないことだ。



671 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 06:13:44.85 ID:8rSjcXEU0.net]
VBAでなくてもクライアントからの急な仕様変更なんて日常茶飯事だから諦めろん
ある程度の仕様変更なら少ない手間で対応できる作りにするのも腕の見せ所だぞ
まぁ言うてその仕様にすんなら全部1から作り直しやんけって仕様変更もなくはないのがツラいところ

672 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 08:27:37.33 ID:V2WgyX4h0.net]
だからメンテナンス性とかモジュール化とかクラスが大切になってくるんだよ
経験を積んで仕様書に書かれてない部分も適切に作り込んでおいて、仕様変更のコストを下げるのも腕の見せ所
もちろん、表向きは大変だと言って渋って見せたり高額なメンテ費用を請求する駆け引きも必要

673 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 08:36:08.55 ID:4M98L2BP0.net]
勝手にやってやると調子に乗るだろ

674 名前:デフォルトの名無しさん [2021/11/21(日) 10:03:03.00 ID:zwWMSsz4a.net]
仕様変更っていっも動作確認あわせて1時間もかからんだろ
ここで愚痴る前にさっさと直せよ

675 名前:デフォルトの名無しさん [2021/11/21(日) 12:48:58.97 ID:VeOo+GZo0.net]
馬鹿だから修正に手間が掛かるようなプログラムしか作れないのだろ

676 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 14:30:08.25 ID:CsAuHtPC0.net]
仕様確認を反故にする ユーザーに怒っている人をディスってる奴らが数人いるけど、こいつらは他人をディスってストレスを発散する病んだ人たちなんだろうな。

677 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 15:03:48.31 ID:j1X7Mg5t0.net]
プログラム的なものをやってると後出し仕様変更おしさんにはほぼ100%遭遇するからな

678 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 17:22:27.75 ID:lG7wwdbAd.net]
>>665
テストやリリースまでのドキュメント作成で実際はその何倍もかかるよね

679 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 17:48:21.28 ID:RHabNs0q0.net]
列挙型使ってればデータ収集くらいなら大体は対応できる

680 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 17:56:13.83 ID:Cim/yDW60.net]
後出して仕様変更されても、その分の納期と金額を保証してくれるならまあ許せる
そういうやつらは大概は、元の金額のままで同じ納期でやれっていうからな



681 名前:デフォルトの名無しさん [2021/11/21(日) 18:04:49.83 ID:rJQke0fG0.net]
>>669
それでもここで愚痴るほど暇な訳だが

682 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 19:36:02.92 ID:rJQke0fG0.net]
>>671
個人契約で請け負っているならそういう交渉もあるだろうね
自社開発とかだと上司にそれ言うか?

683 名前:デフォルトの名無しさん [2021/11/21(日) 19:50:30.82 ID:VeOo+GZo0.net]
エンドユーザーに仕様なんて伝えても理解できないことも織り込めない素人に毛が生えただけのVBAプログラマーがこぼしているだけだからな

684 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 22:53:28.70 ID:CsAuHtPC0.net]
>>674
こいつはきっと趣味のプログラマーだな。

685 名前:デフォルトの名無しさん [2021/11/21(日) 23:12:50.46 ID:VeOo+GZo0.net]
悔しかったか?
どんな仕事でも言われたこと(それも自分が理解できる範囲だけ)しかできない無能に限って、少しプログラムできると天狗になって自分が偉いと思い込む

686 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 23:17:45.36 ID:CsAuHtPC0.net]
>>676
俺は100%通りすがりのモンだけど。
お前思いっきり読解力ないな(笑)

687 名前:デフォルトの名無しさん mailto:sage [2021/11/22(月) 02:02:52.47 ID:C2iFLgVU0.net]
人を下に見られる程精通してる人って正直羨ましいわ
知れば知るほどまだまだ知らない事が沢山あるなぁと勉強不足を実感してしまう

688 名前:デフォルトの名無しさん mailto:sage [2021/11/22(月) 07:01:15.65 ID:slGF1Oi+d.net]
知らないから人をバカに出来るんだよなー

689 名前:デフォルトの名無しさん mailto:sage [2021/11/22(月) 08:46:35.28 ID:Pvc6brgHd.net]
>>675
いや、エンドユーザーだよ

690 名前:デフォルトの名無しさん mailto:sage [2021/11/22(月) 09:28:02.25 ID:GKja75Bt0.net]
むしろ人を下にみないと精神状態が不安定なんでしょ



691 名前:デフォルトの名無しさん [2021/11/22(月) 11:55:26.38 ID:L9slPYHUa.net]
15年もやればそうなるんじゃね

692 名前:デフォルトの名無しさん mailto:sage [2021/11/22(月) 23:06:20.51 ID:08E8qmHLd.net]
顔が見えない相手にしか愚痴れないんだろ
我慢してやろうぜ

693 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 00:04:23.39 ID:HyKB94hG0.net]
>>663
クラス作ってインターフェース作って多態性持たせてというのは確かに大事だけど
それを使いこなすレベルであればもう能力的にはVBA卒業だよ。

694 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 06:17:53.07 ID:Xen9jxSh0.net]
生徒が先生に対して自分は下に見られているとかいうのは違うんだけどね

695 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 10:30:00.53 ID:Uhpscs260.net]
その例えがそもそも違うんだけどね

696 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 11:28:47.36 ID:Kq5e1ZWqp.net]
天は
人の上に人を作らず
人の下に人を作らず

697 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 11:46:02.03 ID:glM4yG/J0.net]
古い話になるがエクセル2003くらいのことにはブック固有のツールバーとそのツールバーにマクロボタンを登録できた.
そのブックをオープンすると固有のツールバーが表示されてブック固有のマクロを簡単に実行できた.

エクセル2013を使っているけどこういう機能はなくなったのかな.
VBAでもツールバーを作れるけど,commandbarオブジェクトにaddしてボタンをaddしてなど面倒すぎるし,なにより全てのブックで表示されるとか,特定のブックだけで表示させたかったらそれ用のマクロをイベントと関連付けて切り替えるなど面倒.
昔のような機能を復活させる方法はないでしょうか?

698 名前:デフォルトの名無しさん [2021/11/23(火) 12:15:05.23 ID:2bUUy2X7a.net]
2003インストールしたらできるんじゃないかな

699 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 12:19:08.48 ID:glM4yG/J0.net]
>>689
お前はお笑い芸人か

700 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 12:58:36.46 ID:CIHUE1VX0.net]
>>688
クイックアクセスツールバーに表示できる
そのブックだけに適用とかの設定もあったはず



701 名前:ハノン mailto:sage [2021/11/23(火) 13:55:58.62 ID:A++o7U7T0.net]
>>687
人の中に人を作れり

702 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 15:21:24.36 ID:/4Q7KTnxa.net]
職場にVBAバカにする人が多くて辛いです。
どうしたら見返せますか?

703 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 15:31:34.69 ID:RPYITf6Hd.net]
>>693
他の言語やればいい

704 名前:デフォルトの名無しさん [2021/11/23(火) 15:46:47.44 ID:vnr7FnzGa.net]
>>693
VBAのソースを頭から読み返せばいい

705 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 16:56:40.89 ID:glM4yG/J0.net]
>>693
VBA と言わなきゃいいんじゃない。どうせ VBA と C の違いもそいつはわかんないだろう。

706 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 16:58:43.07 ID:azQICWGX0.net]
>>696

707 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 17:07:40.89 ID:pTXgLOiP0.net]
プロシージャモジュールを作ってます

708 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 19:22:11.55 ID:Xen9jxSh0.net]
マジレスすると、VBAだから馬鹿にされているんじゃなくて内容がチープだからじゃね
とりあえずセンスのあるグラフとか作ればそれなりに見えると思う

709 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 21:29:31.50 ID:h2kETaBe0.net]
Excelでセンスのあるグラフって描けるの?

710 名前:デフォルトの名無しさん [2021/11/23(火) 21:42:34.64 ID:VKZug2mU0.net]
その件はペンディングでお願いします。



711 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 22:13:21.88 ID:d9zk2oza0.net]
高度な処理をするより見た目派手なことするほうが関心されるってのはあるわな

712 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 22:18:57.11 ID:Uhpscs260.net]
そら見た目の印象で判断してるからな
実際どんな事やってるのか踏み込む人には効果無し

713 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 17:35:27.48 ID:l0nIbD9FM.net]
動いてる感じを演出して見た目を楽しませるの結構大事だよ
書き込んだところをselectするようにしたら、嬉しそうにセルに書き込まれてる様子眺めてた

714 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 18:46:24.44 ID:M33cGNY60.net]
リアルタイムの進捗状況見れるしな
そういうの好きな人は懐かしのデフラグも好きそう

715 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 21:02:30.81 ID:zoTAHfV40.net]
>>684
VBAがインターフェースだのクラスイニシャライザだのポリモーフィズムだの
実装してくれればいいだけじゃないのかな。

「卒業しなきゃいけない」ものでもないだろ、今の普及度見てると。

716 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 21:45:28.54 ID:KGMrLahJ0.net]
>>706
いらんいらん
vbaはあくまで今ぐらいの不便さでちょうどいい
下手にそんなもん実装されたら読みづらくなってかなわん

717 名前:デフォルトの名無しさん mailto:sage [2021/11/25(木) 19:13:08.61 ID:pDjO55r30.net]
>>706
VBAにはインターフェースあるよ

718 名前:デフォルトの名無しさん mailto:sage [2021/11/25(木) 23:19:56.43 ID:WSSTsN1M0.net]
>>708
あったっけ。俺の記憶違いならごめん。

あと、致命傷なのが実質グローバル変数化するエクセルのセルだと思う。
あれ、とてもやっかい。

719 名前:デフォルトの名無しさん mailto:sage [2021/11/25(木) 23:31:25.24 ID:OcubR2wD0.net]
>>691
ありがとうございました。
できました。

720 名前:デフォルトの名無しさん [2021/11/25(木) 23:41:58.44 ID:1AcsgpK30.net]
Open/Nameで開く/リネームするファイルの名前に
全角括弧や中黒、半角ピリオドが入っていると
実行時に「エラー53 ファイルが見つかりません」
が出ます。
ファイル名が長すぎるのかと思い短くしたが変わらず、
実行前に上記のような文字を削除しておくとと無事処理が終了します。
しかし手作業で削除するのが面倒なのでそれ以外の対処を知りたい



721 名前:ナす。
先生方ご教示ください。
[]
[ここ壊れてます]

722 名前:デフォルトの名無しさん mailto:sage [2021/11/26(金) 00:05:14.55 ID:fWkXgzm/0.net]
うろ覚えだから動かなかったらごめんね
こんな感じにやるといけたかもしれない
Replace(対象のファイル名, "・", Chr(Code("・")))

723 名前:デフォルトの名無しさん mailto:sage [2021/11/26(金) 17:57:21.05 ID:e3tyzrS40.net]
質問です
所定の形式のシートAからデータを取り出し、数値の操作を行ったあと別の形式のシートBに記入すると言うマクロと逆にシートBからシートAに記入するマクロを作りたい場合に楽をする方法はないでしょうか?
今まではA→BとB→Aで2つマクロを作ってたのですが見るところが同じなのでまとめれるように感じたのです
プログラムについて詳しくないので無茶なことを言っているかもしれませんがよろしくおねがいします

724 名前:デフォルトの名無しさん [2021/11/26(金) 18:18:33.57 ID:6S+lbrca0.net]
またRuby馬鹿か

725 名前:デフォルトの名無しさん mailto:sage [2021/11/26(金) 19:32:54.64 ID:y13IYOoN0.net]
>>713
自分で考えないで他人に作らせるのが一番楽じゃないかな

726 名前:デフォルトの名無しさん mailto:sage [2021/11/26(金) 20:39:32.12 ID:Jy5iToKI0.net]
>>713
Cを作ってそれで操作

727 名前:デフォルトの名無しさん mailto:sage [2021/11/26(金) 20:40:23.50 ID:90E5eyRt0.net]
>>715
まさに今やってるのがそれだな

728 名前:デフォルトの名無しさん mailto:sage [2021/11/26(金) 21:24:20.33 ID:wVBXN9pL0.net]
>>713
その気づきが大事だよな
プロシージャを分けてCallで呼び出して引数はシートにする

729 名前:デフォルトの名無しさん mailto:sage [2021/11/26(金) 21:29:44.76 ID:l5KPHXyn0.net]
もうRubyは飽きたから
VBAで書かないならせめて
今流行りのPythonとか
新たに注目されてるRustとか
いずれWebのExcelで必要になるJavascriptとか
VBAやってる人が次に進みやすい
VB.NetとかC#とかその辺で書けばいいのに
Rubyとかで書いて来るセンスないバカは
死ねばいいと思う

730 名前:デフォルトの名無しさん mailto:sage [2021/11/26(金) 21:57:57.19 ID:sYQtOY9h0.net]
…落ち着けよ



731 名前:デフォルトの名無しさん mailto:sage [2021/11/26(金) 23:05:04.12 ID:Jy5iToKI0.net]
>719
一応マジレスする
rubyにはとんでもないキチガイがいて、そいつが嵐回っている
そのおかげでrubyは総スカン、言語に影響するレベルで貶めされるようになった

キチガイ一人で言語一個潰せたのは割とマジですごいと思う

732 名前:デフォルトの名無しさん [2021/11/26(金) 23:29:32.65 ID:YCQQxNQi0.net]
あわしろ氏が言ってたけど、ベンダーロックインされるから、特定企業の言語は使わないほうが良いよ。

733 名前:デフォルトの名無しさん mailto:sage [2021/11/27(土) 07:12:17.07 ID:/aLCz2Bk0.net]
>>713
値を取得したいセルの範囲をどっかのセルに書いといてその位置を引数で渡せばいいじゃん
複数範囲があるならその複数セルの位置を書いた範囲を引数で渡せばいい。

734 名前:デフォルトの名無しさん mailto:sage [2021/11/27(土) 07:20:09.69 ID:/aLCz2Bk0.net]
あのあわしろ氏とかいうのはアホだから
今はLinuxでさえExcelと似たようなソフトがあってそれでもVBAが動くことか考慮していないのだろう
Cなんか組込系はハードによってすらコードが左右されるのに、必要なときに必要な勉強をすればいいだけなのに変な固定概念を持っててそれを人に押し付けてる

735 名前:デフォルトの名無しさん mailto:sage [2021/11/27(土) 08:52:39.21 ID:OaX0N5DnM.net]
>>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

736 名前:デフォルトの名無しさん mailto:sage [2021/11/29(月) 11:44:05.96 ID:7iqP84qYM.net]
やっと多態性の概要が分かってきた

737 名前:713 mailto:sage [2021/11/29(月) 11:52:31.66 ID:mgylUf/ZM.net]
範囲を別のところに書いたり引数指定でやればいいんですね
遅くなってしまいましたが色々なご意見ありがとうございます

738 名前:デフォルトの名無しさん mailto:sage [2021/11/30(火) 12:14:18.10 ID:i6pa9Q1E0.net]
>>726

VBの多態性?

739 名前:デフォルトの名無しさん mailto:sage [2021/11/30(火) 12:24:36.07 ID:i6pa9Q1E0.net]
ああ。CallByNameとかを使えば擬似的にできるんだ。へえ。

しかし、クラスイニシャライザと継承を普通に実装してくれれば
…くれないんだろうな、もう。

740 名前:デフォルトの名無しさん mailto:sage [2021/11/30(火) 13:25:55.62 ID:xmFPZymv0.net]
すいません質問させてください。
特定のエラーウィンドウが出たら実行するマクロを作りたいのですが
実行条件の指定の仕方がわかりません。
具体的には「データの入力規制」のエラーメッセージタブで指定した
ウィンドウの「はい(Y)」を自動で押したのちにマクロを実行させたいです。
ご教授お願いいたします。



741 名前:デフォルトの名無しさん mailto:sage [2021/11/30(火) 16:33:24.70 ID:yU0uPSMf0.net]
え、そんなことできるの!?

742 名前:デフォルトの名無しさん mailto:sage [2021/11/30(火) 17:17:34.47 ID:EuUrWRYz0.net]
>>731
エラーハンドラーでできないの?

743 名前:デフォルトの名無しさん mailto:sage [2021/11/30(火) 18:33:56.15 ID:Nxhl39nB0.net]
できないから質問したんじゃないの?

744 名前:デフォルトの名無しさん mailto:sage [2021/11/30(火) 18:53:53.22 ID:gFsrJhmJ0.net]
730です。
vba内?で出たエラーを条件にした処理は探せたんですが、エクセルが出したエラーをトリガーにしたものが探せなくて質問させていただきました。もしあるならば知りたいなと思った次第です。

745 名前:デフォルトの名無しさん mailto:sage [2021/11/30(火) 19:41:38.94 ID:C0MmFQGd0.net]
その入力規制をVBAにしたほうが手っ取り早い

746 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 04:06:37.80 ID:RALKNP3F0.net]
なるほど、確かにそうかもしれません。
ありがとうございました。

747 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 09:01:08.50 ID:k/wjCDWPa.net]
Excelスレに書き込んだ後にVBAスレがあることに気付きました。

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

Range("A2").value = "=(1,2,3," & Range ("A1").value & ",5,6,7,8,9,""abc"",0)"

748 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 09:26:46.14 ID:+HkH87nC0.net]
ありません

749 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 09:26:59.16 ID:D4hpf6JM0.net]
>>737
数式を変えるか、セルの書式を文字列にする
Range("A2").Value = "'=(1,2,3," & Range ("A1").Value & ",5,6,7,8,9,""abc"",0)"

750 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 11:09:46.49 ID:3lXUqEaB0.net]
>>729
クラスのコンストラクタ自体はあるよ。引数が使えないだけで。
VBAの場合は一般的に言う継承は使えないけども移譲が使えるのでクラスで多態性を持たせる場合は
テンプレートメソッドパターンを使うのではなくストラテジーパターンを使う。



751 名前:デフォルトの名無しさん [2021/12/01(水) 11:40:27.26 ID:QKQZx/r30.net]
ユーザーフォーム上でのハイパーリンクに関して教えて欲しいです。

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

レコード 氏名  駅   地図(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)」のラベルを使ってリンクを開くをお教えていただけないでしょうか。

752 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 11:45:54.74 ID:3lXUqEaB0.net]
>>741
officetanaka.net/excel/vba/tips/tips01.htm

753 名前: []
[ここ壊れてます]

754 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 11:51:59.83 ID:3lXUqEaB0.net]
まぁその前にExcelのユーザーフォームは
スプレッドシートやグリッドビューや
HTMLでいうTableタグのようなものが無いので
擬似的に一覧を作る方法を考える方が
先だと思うけど。

755 名前:デフォルトの名無しさん [2021/12/01(水) 11:57:47.33 ID:QKQZx/r30.net]
Private Sub ラベル地図_Click()
Dim a
a = 地図.Text
ユーザーフォーム.FollowHyperlinks Address:="a"
End Sub

なんとなくこんな感じなかとやってみたのですが、エラーでした。
宜しくお願いいたします。

756 名前:デフォルトの名無しさん [2021/12/01(水) 11:59:07.74 ID:JKRXUH4pd.net]
VBAって初学者はどうやって勉強すればいいんですか?

757 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 12:03:16.45 ID:G1NuLHw5M.net]
>>744
=a
だとどう?

758 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 12:12:34.05 ID:KAm88z78M.net]
>>745
変数の定義、ループ文の書き方、条件分岐の書き方が分かれば大体の言語はなんとかなる
あとは自分が何をやりたいかによってこんな動作はできるか?あんな動作は可能か?って一つ一つ調べていけばいい
処理速度が遅いと感じ始めたら最適化とかに手を出したり、シークバーを表示することで体感速度を早めたりっていう事を覚えていけば最低限はなんとかなるんじゃない?知らんけど

759 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 12:23:56.22 ID:3lXUqEaB0.net]
>>745
「〜をやりたい」という目標を決めたら
後はGoogle先生とマクロ先生に聞けばいいんじゃないかな

760 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 12:31:06.77 ID:3lXUqEaB0.net]
>>744
そうだね、
まずは3行目の変数に代入している文字列を
ダブルコーテーションで囲めばいいんじゃないかな。
後、地図.txtってどこのフォルダに格納されているのかな?フルパスで書かないとダメだよね。
最後に>>746の人が言ってるとおり、それだとaという変数の中にある頭を見て飛んでるんじゃなくて、
aというリンク先に飛ぼうとしているよね。



761 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 12:33:40.85 ID:3lXUqEaB0.net]
ごめん誤表記
頭×
値◯

762 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 12:42:23.19 ID:k/wjCDWPa.net]
>>739
ありがとうございます
無事にできました!

763 名前:デフォルトの名無しさん [2021/12/01(水) 13:31:12.78 ID:QKQZx/r30.net]
Range ってテキストボックス内の文字列(アドレス)指定できたでしょうか??


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

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

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

安易に質問してすみませんでした。
勉強しなおします。
他いろいろ試してまた分からなかったら来ます。

764 名前:デフォルトの名無しさん [2021/12/01(水) 13:36:58.56 ID:QKQZx/r30.net]
>>745
上の>>744初心者です。
マクロの記録使って、そのコード見てイジってます。

この方法って間違ってる気もしますが・・・。

765 名前:デフォルトの名無しさん [2021/12/01(水) 13:40:49.74 ID:RRRUPRTbM.net]
フォームオブジェクトには.FollowHyperlinksというメソッドは無いね

WorkbookかApplicationのを使うとよろし

766 名前:デフォルトの名無しさん [2021/12/01(水) 14:39:09.38 ID:8YNSD3Np0.net]
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))

767 名前:=“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
元のマクロデータ結果が消えるのと、フォルダ移管がうまくいきません。誰かたーすーけーてー。
[]
[ここ壊れてます]

768 名前:デフォルトの名無しさん [2021/12/01(水) 14:39:40.62 ID:WlcvAg5v0.net]
>>747
>>748
ありがとうございます

769 名前:デフォルトの名無しさん [2021/12/01(水) 15:27:28.95 ID:RRRUPRTbM.net]
今日び小学生でも拡張子変更なんぞせんぞ

770 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 15:29:25.99 ID:+HkH87nC0.net]
へぇー



771 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 15:37:37.70 ID:Jx6PEbk5M.net]
拡張子なんてずっと前から非表示がデフォルト設定だもんな
表示してるのはIT技術者とマニアぐらい

772 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 17:45:16.35 ID:j0FzcgCOM.net]
>>745
解説本読んだら、やりたい事 vbaでググる

773 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 17:45:55.82 ID:G1NuLHw5M.net]
>>755
さっきの人もそうだけど、とりあえず変数を""で囲うのやーめーてー

774 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 18:55:24.01 ID:mU2lRylq0.net]
>>755
せめてコード載せる時は
全角ダブルクォーテーションやーめーてー

775 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 20:04:07.09 ID:D4hpf6JM0.net]
スマホ使いにそんなこと言ってもしゃーないで

776 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 20:12:27.50 ID:mU2lRylq0.net]
PCやけど

777 名前:デフォルトの名無しさん [2021/12/01(水) 20:28:25.20 ID:FnvfENRiM.net]
ExcelスレにはPCからアクセス出来ないからと
全部手打ちのお客さんが稀に良く来るんだよ
いつものひとって呼ばれているけど個体ではなく群体かもしれないね

778 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 21:12:48.54 ID:s3di+kE80.net]
なにそれ怖い

779 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 21:14:41.21 ID:qDEAEYAb0.net]
>>745
今やってる手作業を全部マクロで書いてみる
とにかくひたすら、
「入力を最低限に」
「出力を正確に」
を考えると、実用十分な面で腕が上がる

あとはオブジェクト、setなどを覚えると更に快適になるけど
まぁそこまで覚えなくてもいいことがほとんど

780 名前:デフォルトの名無しさん [2021/12/01(水) 21:25:33.13 ID:fkQJutja0.net]
「助けて」と質問を書くのは馬鹿ばっか



781 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 21:42:33.27 ID:+HkH87nC0.net]
タスケテ…

782 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 22:01:16.26 ID:qDEAEYAb0.net]
コロシテ…

783 名前:デフォルトの名無しさん [2021/12/01(水) 22:12:07.13 ID:8hr1PHBLd.net]
オコシテ…

784 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 22:19:52.19 ID:jZirIxvE0.net]
excel vnaでパス区切りが入りません。
\マークの前に、変な文字が入ってしまいます。
a=“c:\tmp\”

a=“c: \tmp \”
みたいになります。
解決策をご存知の方いませんか?

785 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 22:22:18.62 ID:+HkH87nC0.net]
>>772
どの時点で入るのか

786 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 22:22:56.56 ID:juM9jQJh0.net]
VNAじゃ無理だな

787 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 22:28:54.98 ID:jZirIxvE0.net]
>>773
パスを連結する所です。
次のようなコードです。

file = wsh.specialfolder(“Desktop”) & “\test.csv”

788 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 22:31:48.27 ID:+HkH87nC0.net]
>>775
実行時なのか書いてるときなのかってこと

789 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 22:37:04.57 ID:jZirIxvE0.net]
>>776
実行時です。
lenで長さを調べると、不明な文字分、長くなっています。

790 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 23:27:22.80 ID:J8+WBzZ00.net]
Ruby の文字列には、こういうメソッドがある

chomp は、文字列の末尾に改行コードがあった場合に、文字列の末尾の改行コードを削除します。
strip は、文字列の前後のホワイトスペース(空白類?)をすべて削除します



791 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 23:37:48.12 ID:qDEAEYAb0.net]
使用者の低下率ナンバーワンのrubyか

792 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 23:47:40.21 ID:dyETJfYa0.net]
とりあえず、半角スペース?をRelaceしてその場は乗り切ればいいんじゃない
根本的な解決じゃないだろうけどVBAなんだからその場しのぎで十分

793 名前:デフォルトの名無しさん [2021/12/02(木) 02:56:08.75 ID:dh8YZ99S0.net]
>>780
Ruby馬鹿に引っ掛かる馬鹿

794 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 05:50:03.53 ID:TBtFTtDf0.net]
>>780
半角スペースでは無い文字だったので、置き換え出来ませんでした。
結局、動的にパスを連結するのは諦めて、一つの文字列にして対応しました。
お騒がせしてすみませんでした。

795 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 09:23:36.17 ID:QiUejsWg0.net]
絶対別のどこかにバグがあるパターンやな
ステップ実行しながら変数の中身をチェックしてみ

796 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 15:07:50.32 ID:25yj5vFO0.net]
全角空白、CR、LF、ESC文字、TABコード、00H、のどれかに10ガバチョ
不明文字の文字コード調べればすぐわかるのになぜしないのか?

797 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 19:13:44.99 ID:Q4ipSZlu0.net]
>>747
> 変数の定義、ループ文の書き方、条件分岐の書き方が分かれば大体の言語はなんとかなる

OOPからのパラダイムシフトすら起きつつある今、それだけでは
ソース見て、?????にならないか。

798 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 19:16:51.76 ID:YGzDOnnRM.net]
基本を押さえれば何が出来るかとかどう調べればいいか分かるって言う話なのになんでそれオンリーで戦おうとするん

799 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 19:34:11.48 ID:vBr1OiF/0.net]
縛りプレイ?

800 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 20:00:04.69 ID:Q4ipSZlu0.net]
ああ、なるほど。すまんかった



801 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 20:17:25.75 ID:i+BC+GFiM.net]
それがこのスレに集う人達のクォリティ

802 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 21:25:27.56 ID:8cWBX7d10.net]
知らんけどって最後につけてるからセーフ

803 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 22:03:16.66 ID:gXiV7p3O0.net]
知らんがな

804 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 04:54:46.81 ID:a7s6mUHw0.net]
>>775
csvがユニコードだったのではなかろうかもう解決したみたいなのでどっちでもいいけど
自分の場合は、ウェブからコピペしたセル上の文字列がユニコードなのにそれを

805 名前:vbaで扱おうとしたらちょっと嵌まったまあなんとかうまく処理できたけど
vbaのエディタはユニコードに対応してないそうだから困っちゃうね
[]
[ここ壊れてます]

806 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 05:26:40.56 ID:6JzCupcO0.net]
>>792
これ全く再現できないんだよな

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

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

質問者は素直にコードを一部始終書いて、
「ここでこうなるようにしたい」とそれだけ書けばいいのにと常々思う。

807 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 07:05:37.24 ID:8nMwCozS0.net]
>「ここでこうなるようにしたい」とそれだけ書けばいいのにと常々思う。

禿げ上がるほど同意

808 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 08:32:26.43 ID:5OfA8a2a0.net]
また髪の話してる(´・ω・`)

809 名前:デフォルトの名無しさん [2021/12/03(金) 11:57:05.48 ID:9DdfYS8Sa.net]
IE操作をしてとあるページまで辿り着いて、そこのBASIC認証のポップアップにユーザー名とパスワードを入力した後、OKをクリックする、ということをやりたいです
詳しくないのですが、普通にリンクを辿っていく感じではなく、div要素にJavaScriptが埋め込まれていて、VBAでIdやClassを指定してクリックしてもページ遷移しません
BASIC認証を求められるページの先にあるデータが目的なのですが、そこへ直接行くURLは分かっていても、当然ながら先にログインしてないとデータが閲覧できないようになっています
直接URL先へ飛んでもBASIC認証のポップアップが出ないため、初めから順にページ遷移していって、BASIC認証を求められる特定の場所まで辿り着きたいのです
そのBASIC認証を求められるページのURLが分からないので、遠回りでもそういう方法しか自分には思い浮かびません
URLにユーザー名とパスワードを埋め込む方法はもうできないそうなので、どうにかJavaScriptによるページ遷移をVBAによるIE操作でやりたいです
必要な情報がなにかも分からないのですが、具体的にどうすればdiv要素に埋め込まれたJavaScriptを動かせますか?

810 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 12:53:21.83 ID:zxa5p7EY0.net]
>>796
認証している画面(ログイン画面)は分かりますか?
そもそもですが、一度ログインした情報をクライアントサイドで持ち回っているとは限りませんよ。

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

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

直接入るようにするのであれば、そのサイトも社内環境のような場所にあるのであれば、そういう口を作って貰うのが一番手っ取り早いでしょう。
そんなに簡単に入れるのなら内部の情報抜きたい放題ですよね?
だから認証というものがある訳です。



811 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 13:12:32.34 ID:ssU1VLQS0.net]
>>796
鯖によって使えるかどうか変わるけど、URLにIDとパスワードを埋め込んで認証させてしまうという方法がある
あとJavascriptでのページ遷移もURLにスクリプトを埋め込む方法で飛べてしまうケースがけっこうある
これ以上は具体的にそこのサイトを教えてもらわないと、何が使えるとかアドバイスは難しい

812 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 13:19:32.02 ID:ssU1VLQS0.net]
>>796
URLなんてパケットキャプチャすればすぐわかる
ただしURLにワンタイムキーが含まれてる場合はURLがわかってても直接飛ぶのは不可能
ポップアップウィンドウに文字列を入力する最終手段としてSendKeysというのもあるけど、安定動作させるのが難しすぎるのであまりおすすめしない

813 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 13:54:04.52 ID:flES33au0.net]
>>796
他のアプリ操作してネットワークにアクセスするのをVBAで作るのはやめなされ

814 名前:デフォルトの名無しさん [2021/12/03(金) 14:27:04.84 ID:SW8VES6Na.net]
>>797
詳細は分からないのですが、一度ログインした後ならば、その先のURLへ直接飛んでも閲覧できるんです
なので、とりあえず一度でもどうにかログインさえすれば、なんとかなるかなと思っています

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

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

>>800
あまり良くないであろうことは分かってるんですが、できればすでにあるVBAコードの中に組み込みたいんです・・・

815 名前:デフォルトの名無しさん [2021/12/03(金) 14:43:51.51 ID:0Pem6RYZM.net]
Authorizationヘッダを追加する方法は試したの?

816 名前:デフォルトの名無しさん [2021/12/03(金) 15:07:12.35 ID:HI4Cro1ra.net]
>>802
BASE64でエンコードしてやる方法でしょうか?
一番最初にそれを試しましたんですが上手くいきませんでした

817 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 15:24:32.70 ID:zxa5p7EY0.net]
>>801
>>797
>詳細は分からないのですが、一度ログインした後ならば、その先のURLへ直接飛んでも閲覧できるんです
>なので、とりあえず一度でもどうにかログインさえすれば、なんとかなるかなと思っています

ならばgetElementByIdで目的のテキストボックス拾って値設定して、
同様にボタン拾ってClickさせるコードを書いて、その後目的のページに飛べば行けるような気がしますが、それでは駄目なのでしょうか?

818 名前:デフォルトの名無しさん [2021/12/03(金) 15:52:30.54 ID:vV4ZoTXpa.net]
>>804
IdやClassNameでは.Clickでも駄目でした
ページ遷移という書き方をしてしまいましたが、正確にはdiv要素がstyleで画像になっていて、それをマウスクリックするとそのページ内でメニューがポップアップします
そのメニューにも同様にボタン画像があって、いくつかクリックして潜っていった先の一つをクリックすると、今度はBASIC認証のウィンドウが出てきます

819 名前:デフォルトの名無しさん [2021/12/03(金) 18:05:37.11 ID:n8IJVD8na.net]
web側で認証しなくていいように直せよ

820 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 20:39:08.05 ID:XIVj35HM0.net]
>>805
で書いてある通りに、やっていけば?
Ruby on Rails の統合テストのCapybara は、そういう感じでやっていく

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

Seleniumでは、要素が出現するまで待ってくれるので、操作しやすい。
この機能がない場合は、適度にsleep して待てば良い



821 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 21:16:21.68 ID:8nMwCozS0.net]
>>807
うわぁ・・・rubyってこんなのしかいないのか
rubyの勉強しようと思ってたけどもうやめる

822 名前:デフォルトの名無しさん [2021/12/03(金) 22:10:47.69 ID:j3L0Seq20.net]
またRuby馬鹿の釣りに引っ掛かった馬鹿ども

823 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 22:14:21.75 ID:SLFpaNjyM.net]
と、馬鹿が申しております。

824 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 23:03:37.81 ID:6JzCupcO0.net]
>>796
Basic認証の情報はホスト名毎に自動的に送信されるはずだから、
事前に認証後に遷移するURLへAuthorizationヘッダに認証情報を追加した状態でNavigateメソッドを実行しておけばどうかな。
そのあと通常通り辿ってBasic認証が求められるページに行ったらどうなる?

825 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 02:28:53.31 ID:DkK1m4G2M.net]
https://www.vba-ie.net/sp/collection/iebasic.php

826 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 14:10:39.93 ID:6zlbLfe7a.net]
根本的な質問で恐縮ですが。EOMonth関数でシリアル値が取れるのはわかっていますが、そこからMonthのみ取り出したらその「月数」のデータ型も日付シリアル値の一部のままと考えていいでしょうか。
それともただのint型やstr型などになってしまうのでしょうか。

827 名前:デフォルトの名無しさん [2021/12/04(土) 14:42:38.47 ID:o3TwiRqy0.net]
>>813
https://support.microsoft.com/ja-jp/office/month-%E9%96%A2%E6%95%B0-579a2881-199b-48b2-ab90-ddba0eba86e8

828 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 14:59:32.05 ID:cNOnihHeM.net]
>>813
月を取り出したらDateserialで好きな日付のシリアル値を作ればいいアル

829 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 16:20:58.44 ID:6zlbLfe7a.net]
>>813 >>814
ありがとうございます

830 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 16:21:36.10 ID:6zlbLfe7a.net]
>>814 >>815でした。
すみません。
改めてありがとうございます



831 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 20:10:40.70 ID:cgBQWMPD0.net]
1.A列にシートごとに不特定多数(X)のセルがある
2.セルの個数にしたがってを4等分する(小数点以下切り上げ)
3.等分したデータをBCDへ移動する

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

データの最終行の取得方法はわかったけど使い方がわからない…

832 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 20:21:19.59 ID:2gyaMYwu0.net]
>>818
セルの個数が小数点になるのが理解不能
なんか文がおかしい

833 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 20:26:20.12 ID:2gyaMYwu0.net]
>>818
ごめん4等分か。
セル個数数えて4で割れば数は出ると思うから、
その数をcellsでn、n+1から2*n、2n+1から3nで範囲選択してコピーとかすればいいんじゃね

834 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 20:27:45.56 ID:cgBQWMPD0.net]
>>819
レスありがとう
4等分って書き方が悪かったかな
A列セルが1234こあったら1234 / 4 =308.5
ABCD列に309 309 309 307こずつ配置したい

835 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 21:22:26.78 ID:cgBQWMPD0.net]
これが構文エラーになっちゃうのはなんででしようか?
https://i.imgur.com/uZw8aRE.jpg

836 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 21:40:43.97 ID:26JgLixHM.net]
>>818
> 2.セルの個数にしたがってを4等分する(小数点以下切り上げ)
[1] A, B, C 列の個数 = WorksheetFunction.RoundUp(A列の個数, 0)
[2] D列の個数 = 元のA列の個数 - 3 * ([1]で求めた個数)

837 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 21:44:29.23 ID:26JgLixHM.net]
>>822
なんかに代入してないから

838 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 05:50:33.57 ID:LmHUo9b4p.net]
>>793
mac版で編集、保存したファイルでなった事あるよ。
winで作ったxlsmをmacで編集、保存する。
後phpexcelなどのライブラリーを使ってwebからダウンロードさせたファイルでも同様の現象になることがあったなぁ。

839 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 07:36:04.48 ID:pHE92v1E0.net]
MacのExcel VBAは使い物にならないからやめとけとあれほど

840 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 07:48:10.10 ID:qeQQs+3u0.net]
>>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



841 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 11:29:11.55 ID:PoobQwg20.net]
数値をバーコード化するマクロ使うと、かなりの確率でWorksheet クラスの Paste メソッドが失敗しました。が起きるのはなぜでしょうか

貼り付けコマンド直後にDoEventやると少し緩和されます

842 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 11:45:46.53 ID:qeQQs+3u0.net]
>>828
そのマクロの作者に聞いてください
うちで使ってるバーコードマクロだとそんな症状は出ないので

843 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 13:12:32.58 ID:AJKte2/X0.net]
>>828
バーコードフォントってのがあるから、そっち使ったほうがいいと思う

844 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 16:00:44.92 ID:2zMPQ80f0.net]
           |
            |  彡⌒ミ
           \ (´・ω・`)また髪の話してる
             (|   |)::::
              (γ /:::::::
               し \:::
                  \

845 名前:デフォルトの名無しさん [2021/12/05(日) 16:26:53.62 ID:njmkqf+T0.net]
>>831
このハゲ!

846 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 17:47:50.87 ID:VQoGm9OLd.net]
バーコードフォント使う方法ってダウンロードしないとダメじゃね
現場でこそこそやってる俺はOLEオブジェクトだったか使う王道でやるしかなかったわ

ぐぐるとこの方法がトップに出てくるわけなんだけど
もし>>828がこの方法を使っているとして
何の目的でpasteメソッドを使ってるんだろうね
普通にバーコード作成するだけだと、たぶんだけどpasteメソッドは出てこない

847 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 18:22:43.48 ID:y+vFgULga.net]
質問つか愚痴だけども…
閑散期にやってるアピールで始めたVBA、
入れ過ぎた塩を中和するのに砂糖を入れ、
入れ過ぎた砂糖を中和するのに塩を入れるのを繰り返した
ヘタクソ料理みたいなコーディングの果てに繁忙期に食い込んで上司の視線が痛い…
依然としてどっか直したらどっかが狂う…
業務改善を謳いながら結果的に仕事と混乱をもたらしただけだった…

848 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 19:14:12.64 ID:8RSWuNFi0.net]
>>834
典型的な初心者で草

俺も最初は随分と苦労したけど、
そうなったら最初から書き直したほうが絶対に早いし、腕も上がる
糞みたいなコードを読み直す時間は無駄
せっかく書いたのに・・・って思う気持ちは窓から投げ捨てろ

849 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 21:34:03.94 ID:JOaKTDE2M.net]
いやいや
失敗は成功の母
一度始めたことは苦しくても頑張れよ
出来の悪いコードを苦労して改良して動くようにしたとき、
人はレベルが一段上がる

850 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 21:53:28.84 ID:RVt2OdWb0.net]
一般的にデバッグはコーディングの10倍ぐらい経験や知識が必要な作業だから初心者には荷が重い
まずは最初から書き直してちゃんと動く物を作り上げた方がいいと思うよ



851 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 21:57:39.03 ID:xjUFmHBZ0.net]
書き直しって一からベタ打ちするんじゃなくてコピペがほとんどですよね?

852 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 00:08:42.46 ID:0TmKxSpwM.net]
それは、なにをするコードかにかかってる

853 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 00:13:00.70 ID:8HGqQjXT0.net]
誰でも最初はコピペから始めるもんだ

854 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 00:15:09.63 ID:emzd9j2L0.net]
거피&베!

855 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 00:15:37.34 ID:8/VOYP4o0.net]
>>838
その辺は慣れ。今からほしいコードが、「書く」「コピペ」、どっちが早いかによる。
ほとんどは自分でベタ書きだけど、個人的にこの辺はマクロの記録を修正するか、ネットからのコピペで済ます
・背景色や罫線を変更する時
・グラフをvbaで制御したい時

856 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 08:59:51.92 ID:8HGqQjXT0.net]
引数の意味がうろ覚えの時、ヘルプを読むより動くコードをコピペした方が早いことも

857 名前:デフォルトの名無しさん [2021/12/11(土) 10:04:25.41 ID:U2WGKbTGa.net]
早さじゃなく内容を優先しないから
つぎはぎだらけになるんじゃね

858 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 10:37:22.38 ID:FFb1xkQN0.net]
行き当たりばったりで建築開始しました
バランスが悪くなって一部倒壊しました

もう更地にして立て直した方がいい事もあるよね

859 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 10:40:37.38 ID:8/VOYP4o0.net]
>>>843
それはたまによくある

860 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 13:51:55.04 ID:8HGqQjXT0.net]
今は早さが最優先される時代だからね
民生アプリやゲームなんてバグだらけでもとにかくリリースして、オンラインでどんどんパッチを当ててく方式が主流になってる



861 名前:デフォルトの名無しさん [2021/12/11(土) 15:19:06.66 ID:yDTfTX/Yd.net]
馬鹿が作って混乱を引き起こすのがVBAです

862 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 16:03:15.75 ID:FFb1xkQN0.net]
VBAテロか

863 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 17:49:58.93 ID:XHSDYDCld.net]
職場なんかで作ってたらろくなもんできないわ
VBAなんか普通はビール飲みながら自宅でつくるもんだ
そうしないと集中できないだろ

864 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 18:00:38.81 ID:xLCFjTgsM.net]
よっぽどじゃないと他人向けのマクロは作らない方がいいよなあ
独学だから、頼まれた機能を実現するために仕方なく作った時は気を使った

865 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 18:49:44.86 ID:phdlt8Qf0.net]
>>848
いや、VBAで作って混乱引き起こすような人はどの言語使っても混乱引き起こすよ。
理路整然と書く人はアセンブラでも綺麗なコードを書く。

866 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 18:53:20.61 ID:PtEkn1n00.net]
ジャンプ命令の後の命令が実行されてからジャンプするような意味不明な設計でそんなこと無理だ

867 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 19:01:24.21 ID:FFb1xkQN0.net]
PS2のデバッグで出会ったわそれ
Mipsだったかで

868 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 20:11:09.89 ID:JZyyoC8MM.net]
遅延スロット知ってる俺すげー君が現れた!

869 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 20:15:06.16 ID:FFb1xkQN0.net]
遅延スロットって言うのかあれ
知っててすごいね

870 名前:デフォルトの名無しさん [2021/12/11(土) 20:26:38.51 ID:EpvuxOsQ0.net]
一気に形勢逆転。



871 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 12:00:32.32 ID:fOYhEkbg0.net]
数年前までVBAで結構組んでたんだけどちょっと必要があって使ってみたらセーブに10分くらいかかる
調べてみると

872 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 12:04:50.97 ID:fOYhEkbg0.net]
ごめんなさい途中でかきこんでしまいました
VBAのコードが長いとセーブに時間がかかるとあったのでモジュールを削除してみましたが変化なし
そこで新規にbookを作ってコピペでVBAのコード他すべての要素をコピペしたら普通にセーブできたのですが
これはどういった原因が考えられるでしょうか?
ちなみに別のPCで使ってみたら普通にセーブできました

873 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 13:09:25.29 ID:ir+yquaT0.net]
マクロ付きブックの保存なんて普通は1秒で終わる
10分なんてあきらかに異常だし、たとえ10秒でもおかしい
HDDの故障やウィルスをまず疑うレベル

874 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 13:16:29.89 ID:fOYhEkbg0.net]
そんなことは分かってるから質問してるんですが日本語読めてますか?w

875 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 13:52:38.61 ID:Q+i1BsMe0.net]
>>850
それな
で、職場で仕事がなくなる。なんだかよくわからん状態になる

>>859
ブックの中にゴミデータが溜まってる
・条件付き書式
・名前の定義
特に条件付き書式はコピペで増えるので要注意。vbaでコピペを繰り返すマクロを繰り返すうちに、恐ろしく重くなる事がたまによくある

876 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 14:16:03.78 ID:fOYhEkbg0.net]
>>862
なるほどそれで新規BOOKにコピペするとごみが消えるから軽くなるってことですね
ありがとうすっきりしました

877 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 18:58:52.97 ID:xrQmO7Ym0.net]
消えてほしいゴミはまだいるのにね

878 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 21:54:20.78 ID:6bVn9kYk0.net]
>>861
死ねよ

879 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 21:54:32.69 ID:2LaGAq5q0.net]
>>837
> 一般的にデバッグはコーディングの10倍ぐらい経験や知識が必要な作業だから初心者には荷が重い


ものすごい納得がいく。プログラムの力のかなりな部分を
設計力とデバッグ力が占めてる気がする。

880 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 21:59:03.19 ID:2LaGAq5q0.net]
>>865
あ。禁断のセリフが。

昔の2ちゃんで「氏ね」とか「市ね」とかわざわざ誤字にしてた
理由知らない世代なんだろうなあ…。



881 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 22:11:14.12 ID:fOYhEkbg0.net]
>>865
日本語まともに理解できないからしょうがないんだよなw

882 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 23:18:50.35 ID:8ki8W4LJ0.net]
超初心者です。
10個のブックで、それぞれのブックに同じ名前の4種類のシートがあり、
各シートのE10〜D12に入力されている値を抽出したいんですが、
1つのセルを指定するやり方しかわからず…

できれば10個のブックから一括で抜き取りたいんですけど、どう書けばいいでしょうか。
現時点でできたのはダイアログでファイルを選択して、指定のシートから1つだけ抜き出してくる方法です。
これを複数のセルを抜き出したい(可能なら複数のブック指定して抜き出したい)です。

883 名前:デフォルトの名無しさん [2021/12/13(月) 02:11:31.83 ID:uyvq82Wrd.net]
>>868
>>869
Ruby馬鹿

884 名前:デフォルトの名無しさん mailto:sage [2021/12/13(月) 03:17:35.02 ID:XU8Ge+oP0.net]
>>868
別のPCなら普通にセーブできるって言うから、PCの故障を疑ったんでしょう

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

お前のほうが日本語理解できてないんじゃね?

885 名前:デフォルトの名無しさん mailto:sage [2021/12/13(月) 03:32:37.10 ID:fuRJ2q4u0.net]
>>869
こんな感じで二重ループにする
ブック名やシート名は必要に応じて配列に入れておく

For Bok = 1 To 10
 For Sht = 1 To 4
  Range(" ") = Workbooks("ブック" & Bok).Worksheets("シート" & Sht).Range("D10:E12").Value
 Next
Next

886 名前:デフォルトの名無しさん mailto:sage [2021/12/13(月) 22:01:16.80 ID:r5ZevJAL0.net]
もう解決したかもしれんが
保存にやたら時間がかかるエクセルファイルとは自分の経験だと
非表示にされたシートに画像が貼られまくってたって事があったなvba開いてみたらシートが異常に多くて気づいた
パソコンリテラシーない人はこういうファイルを平気でメールで送ろうとするよねw

887 名前:デフォルトの名無しさん mailto:sage [2021/12/13(月) 22:22:28.96 ID:WFQjB74Q0.net]
知らんけどxlsm形式だと社内メールは送れんわうちじゃ

888 名前:デフォルトの名無しさん mailto:sage [2021/12/13(月) 22:45:39.93 ID:kcZqxtmKM.net]
ボタンのあるシートを
ボタン削除しないままシート削除して
新たにシートを作るっていうコードにしてたら
無茶苦茶ゴミが溜まってファイルが肥大化した挙げ句、
最終的にボタンを貼り付けられなくなった

889 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 00:01:39.40 ID:if1wU8ee0.net]
>>873
リテラシー以前の問題で、何がどうなってるかさっぱりわからない
ただ、開くのに1分ぐらいかかるけどとりあえずは使えるのでつかて下さい、lという感じ

890 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 03:42:43.93 ID:5RVk9rj00.net]
>>873
その画像が沢山貼ってあるシートコピーして
VeryHiddenで隠して送りつけてやればいい。

やられたらやり返す
倍返しだ!!



891 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 17:45:50.47 ID:24fsqNZFM.net]
>>875
ボタン消えないのかよ怖いな

892 名前:デフォルトの名無しさん [2021/12/14(火) 18:25:23.35 ID:xWxoPM4l0.net]
ひとつに見えていても2つのボタンが重なっていることもあるぞ

893 名前:デフォルトの名無しさん mailto:sage [2021/12/15(水) 21:10:32.00 ID:L38lsqXF0.net]
VBAのchengeイベントで

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

初心者じみた質問で申し訳ありません

894 名前:デフォルトの名無しさん mailto:sage [2021/12/15(水) 21:18:56.86 ID:LajuVBw/0.net]
>>880
出来る

895 名前:デフォルトの名無しさん mailto:sage [2021/12/15(水) 21:20:45.35 ID:1EtKKquC0.net]
>>880
数式でも良い?

896 名前:デフォルトの名無しさん mailto:sage [2021/12/15(水) 21:24:32.70 ID:L38lsqXF0.net]
>>882
できればVBAでお願いします
わがままですいません

897 名前:デフォルトの名無しさん mailto:sage [2021/12/15(水) 22:08:43.53 ID:1EtKKquC0.net]
>>883
そうか
>D1に12/3と日付が自動で出力され
この場合の、年がわからない
・常に1980年(デフォルト)
・常に「chengeイベント」のあった年
・今が12月なら来年
など

898 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 01:23:52.85 ID:ZFKVIzjFM.net]
日付と言ってるけど単に文字列で良さそうな感じ

899 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 01:36:42.92 ID:B/UsaEnq0.net]
>>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で日付判定したほうがよかったのだろうか

900 名前:デフォルトの名無しさん [2021/12/16(木) 05:45:18.34 ID:1S4Jwj7Q0.net]
>>886
「できるでしょうか?」と聞かれているだけなのに引っ掛かる馬鹿



901 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 07:14:30.10 ID:P8FnY0OCd.net]
>>887
何か嫌なことがあったのか?

902 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 07:16:48.24 ID:2N+hKbkuM.net]
全く内容が同じ投稿を何度も目にしている気がする
その度に丁寧な回答を貰ってるけど
その処理流行ってるの?

903 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 07:34:41.45 ID:B/UsaEnq0.net]
>>887
大丈夫?

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

回答者:
腕が上がるので気にせずに回答すればオッケー

904 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 07:46:05.41 ID:oEqQwjzjM.net]
そっか

>>886 だけど空白なら終了よりも空白の時は出力先も空白って条件があるから出力先にClearContentsかけた方が良さそう
その後にB1とC1をそれぞれIsNumericでTrueならB1 & "/" & C1をDatevalueで日付データにして出力先へ
あとはElseで文字列として結合して出力とかどうだろう?

905 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 08:42:17.59 ID:Ymr34XoE0.net]
>>886
・「C1が空白ならD1も空白」にしないといけないのにやってない
・B1, C1 以外のセルが変更された場合でも無駄な処理が走る
・Cells( )

906 名前:と Cells( ).Value とバラバラ
・finalty という単語はない
[]
[ここ壊れてます]

907 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 09:06:16.32 ID:80W3ywqF0.net]
>>892
まあ多少エラーがあっても大まかな流れがわかればいいんでねえの?
後は自力だろ
特にエラー処理関連は条件がわからないとやっても無駄だし

>・finalty という単語はない
まずこっから突っ込まないと
>>880
>VBAのchengeイベントで

908 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 10:21:23.91 ID:afXMTOuR0.net]
揚げ足が好物な人に引っかかる優しさ?

909 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 10:48:42.97 ID:ueoAX3Xed.net]
>>883
早速のご返答ありがとうございます
とりあえずB1には文字型は入力されないので、教えて頂いた構文で試してみたいと思いますよ
スレの雰囲気悪くしてすいません
先生たちには
感謝します

910 名前:デフォルトの名無しさん [2021/12/16(木) 12:11:49.85 ID:CWgWh06Ba.net]
足フェチ



911 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 12:59:03.22 ID:stMzJW8vM.net]
>>886
Go Toとか草

912 名前:デフォルトの名無しさん [2021/12/16(木) 20:27:23.55 ID:Y2CVy/MB0.net]
Gotoトラベル。

913 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 20:37:59.11 ID:6VquwdhR0.net]
GoSub Return

914 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 21:57:52.03 ID:jTOt4wzg0.net]
VB.Netでもgotoとかgosubとかremとか残ってるんだよなぁ
いつになったらこんな負の遺産使えなくするのやら
variantとか早々に消したくせに

先にVB.Netの方が消えてしまいそうだ

915 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 22:01:35.50 ID:z6vE3S6bd.net]
>>900
DOS時代の古いアプリを移植して使ってるとこが意外とあるらしい
だから昔ながらの行番号なんかも使えるようになってる

916 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 22:40:48.14 ID:mHaEbFg60.net]
https://sugoikaizen.com/excel_list/vba-macro-01/
超初心者です。上のサイトを参考に非表示のシートを全表示にするようにしたいのですが、実際に使ってみるとアクティブシート?が切り替わって切り替わってチカチカしてしまいます。

その切り替わりのチカチカ、アクティブを切り替えないでシートを表示させることってできますか

917 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 23:12:56.50 ID:gXiWyVoW0.net]
application.screenupdating=false
処理
application.screenupdating=true

918 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 23:49:36.74 ID:B/UsaEnq0.net]
>>892
・「C1が空白ならD1も空白」にしないといけないのにやってない
すまん
・B1, C1 以外のセルが変更された場合でも無駄な処理が走る
ifで分岐させてinsideかInspectorでexitsubだ
・Cells( ) と Cells( ).Value とバラバラ
すまん
・finalty という単語はない
たいぽ

>>897
>Go Toとか草
vbaはエラー処理がエグいので、gotoを使う方が簡潔になる
今回のように、分岐処理が型に依存するような時はあえてエラーを発生させて、gotoでまとめる方が楽
総論としては「trycatch欲しい」だろうな

919 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 23:54:07.68 ID:yQf1medY0.net]
>>901
VBできたのはWindowsになってからだな
DOSのときはMS-Cじゃね

920 名前:デフォルトの名無しさん mailto:sage [2021/12/17(金) 00:50:02.02 ID:6ayQmUSdM.net]
行番号はDOS自体が登場する以前のROM BASIC全盛の頃の話
Microsoft BASICの独自拡張版を各メーカーが移植して搭載してた
FDD普及後も暫くはN88 BASICなどは生き残っていたけどDOS登場後は急速に廃れていった



921 名前:デフォルトの名無しさん mailto:sage [2021/12/17(金) 01:11:17.61 ID:mgcQuSa30.net]
>>906
信長の野望はBASICで作ってあったな

922 名前:デフォルトの名無しさん mailto:sage [2021/12/17(金) 07:15:41.68 ID:yydeurUcd.net]
>>905
DOS版のVB使っていたぞ

923 名前:デフォルトの名無しさん mailto:sage [2021/12/17(金) 07:48:55.45 ID:nHDcKfC1M.net]
シートのデータを
文字コードutf-8、改行コードLFでファイルに書き出す方法教えてください

924 名前:デフォルトの名無しさん mailto:sage [2021/12/17(金) 07:56:20.87 ID:mgcQuSa30.net]
>>908
うわ本当だ知らんかった、すまんす

925 名前:デフォルトの名無しさん mailto:sage [2021/12/17(金) 08:43:20.41 ID:Q9tRMs+C0.net]
>>909
Excel単体では無理
アドインか、マクロか、外部ツールで変換か

926 名前:デフォルトの名無しさん mailto:sage [2021/12/17(金) 12:43:48.01 ID:tWB5K5S10.net]
UTF-8 でも、BOM の有無で2種類ある。
先頭3バイトが「0xEF 0xBB 0xBF」なら、BOM有り

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

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

最近のWindowsでは、BOM無しも使えるかも知れない

927 名前:デフォルトの名無しさん mailto:sage [2021/12/17(金) 16:33:33.43 ID:ggdkHu5b0.net]
>>904
先日教えていただいた構文は間違いですか?
今、試したら自分のイメージに近い動作はするような感じです
後は自分で試行錯誤してみたいです

また質問してしまうかもしれませんが
自力でやってみます

928 名前:デフォルトの名無しさん mailto:sage [2021/12/17(金) 20:46:33.62 ID:XfO8F9WV0.net]
空白でないセルの末尾に「様」という文字列を一括追加するマクロを教えてください
置換処理も組み込んで一括で処理したいのでマクロでやりたいです
出来ればコピペで使えるとありがたいです
環境はWin10でExcel2016です
よろしくお願いします

929 名前:デフォルトの名無しさん mailto:sage [2021/12/17(金) 20:53:35.71 ID:csKw8MZR0.net]
置換も末尾に様を付けるのも関数式で行けるがオートフィル

930 名前:でぶわぁーっとやるんじゃアカンのか?
マクロでやっても処理内容的にはあまり変わらんぞ?
[]
[ここ壊れてます]



931 名前:デフォルトの名無しさん mailto:sage [2021/12/17(金) 20:58:45.17 ID:XfO8F9WV0.net]
この先をずっと繰り返す作業なので、複数の置換と文字列付加を1つのマクロにまとめたいのです

932 名前:デフォルトの名無しさん [2021/12/17(金) 21:12:38.32 ID:ptO1GC2n0.net]
いつものあいつの釣りとあまりに馬鹿過ぎる質問はお断りです
また、Excelの使い方すらわからない人はお帰りください

933 名前:デフォルトの名無しさん mailto:sage [2021/12/17(金) 22:36:33.99 ID:V6YMPjTu0.net]
>>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

934 名前:デフォルトの名無しさん mailto:sage [2021/12/17(金) 22:44:20.69 ID:/MGmp6un0.net]
何回もマクロ動かして 山田様様 ってなってわけわからんようになる

935 名前:デフォルトの名無しさん mailto:sage [2021/12/17(金) 22:48:52.62 ID:V6YMPjTu0.net]
>>919
まぁこれは直接書き換える案件じゃないんだよな
名前列 & (”様”|"御中")が良い

このやり方だと、最後が「様」で終わる名字があるとバグるんだよな。昔、「羽様」って顧客からクレームがあって「いいんですけどね・・・」って感じだった
まぁ、珍しい名前だしいいと思う

936 名前:デフォルトの名無しさん mailto:sage [2021/12/17(金) 23:07:41.06 ID:V6YMPjTu0.net]
>>913
致命傷は一点

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

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

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

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

自己弁護でもないが、そのためにも関数やクラスは影響が最小限に済むように、短くまとめる必要がある

937 名前:デフォルトの名無しさん mailto:sage [2021/12/17(金) 23:37:41.46 ID:+tVxxheq0.net]
>>920
> 昔、「羽様」って顧客から
岡山県赤磐市か奈良県生駒市かな?

938 名前:デフォルトの名無しさん mailto:sage [2021/12/17(金) 23:55:47.33 ID:V6YMPjTu0.net]
>>922
東京か埼玉、もしくは神奈川。そもそも「羽様」様、以外にも最後が「様」になる名字はそれなりにいるぞ

939 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 00:00:59.23 ID:K0Bjo2m80.net]
>>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

940 名前:デフォルトの名無しさん [2021/12/18(土) 00:34:19.89 ID:fI0CXnXAM.net]
またいつものあいつに引っ掛かる馬鹿ども



941 名前:デフォルトの名無しさん [2021/12/18(土) 03:53:23.76 ID:RSZ8HegY0.net]
>>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")の部分を変えてくれ。

942 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 04:03:51.98 ID:ghw9tbZ70.net]
>>924
大変感謝します
早速ためして見ます!

943 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 09:44:05.03 ID:jhUX4QL/0.net]
>>914
文字列追加じゃなくて表示形式で対応したらどうだろ
セルの元データを書き換えるのはなんか嫌らしい感じがする

Selection.NumberFormatLocal = "@ ""様"""

944 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 09:58:59.51 ID:KOqLJ1bdM.net]
条件付き書式で様と御中を使い分けるとか

945 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 10:09:57.53 ID:NazcNFuF0.net]
条件付き書式は値に関与できたっけ?

946 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 10:20:06.80 ID:MnOybqtX0.net]
>>930
マイナス、0、プラス、文字列で分岐できる
どこかにそのフラグを持たせれば分岐できるが・・・それなら最初から様と御中書いたほうが早い

947 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 10:21:15.96 ID:mp+R0tauM.net]
>>931
基本は様でフラグ立てたところだけ御中とか

948 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 10:29:07.67 ID:bbhq+5c10.net]
つーか普通敬称つけるのは印刷するときだけじゃね
エクセルのデータに組み込む必要ないような

949 名前:デフォルトの名無しさん [2021/12/18(土) 10:30:58.78 ID:S/VVluSn0.net]
量子の世界では1未満は確率的に存在するんだよ。

950 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 10:47:16.76 ID:S7ay6emt0.net]
王さんに様付けると王様だな



951 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 13:06:35.91 ID:SgR4ReUM0.net]
>>935
イカに様付けるとイカサマだな
楽しいのか?

952 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 13:09:17.63 ID:SgR4ReUM0.net]
>>934
量子の世界でも1か0しかないだろ

953 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 13:11:12.98 ID:SgR4ReUM0.net]
銀行の「行」を消して「御中」に直してた画像あったな

954 名前:デフォルトの名無しさん [2021/12/18(土) 14:28:51.14 ID:S/VVluSn0.net]
だいえーだいえーいえぃいえぃいえぃいえぃ。
だいえーとってもいえぃいえぃいえぃいえぃ。
↓続き。

955 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 14:43:23.05 ID:yfxR8FS90.net]
>空白でないセルの末尾に「様」という文字列を一括追加
これ、今「様」がついてたらつけるなっていう要件じゃないんじゃね
そうじゃないなら、羽様が、羽さん様なのか羽様さんなのか区別できるデータじゃないと不可能だぜ

普通に考えて名称と敬称と分けてもつだろ

956 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 15:31:29.53 ID:XqEkP9jw0.net]
おじいさん、もうその話終わってますよ

957 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 17:00:19.27 ID:T6quYshAM.net]
5chはおじいさんの巣窟ですよ。
子供は他所で遊んだ方が良いですよ。

958 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 17:14:29.79 ID:nevTsbMb0.net]
>>938
直せてねえ…

959 名前:デフォルトの名無しさん [2021/12/18(土) 19:06:22.48 ID:S/VVluSn0.net]
もしかしてお前らダイエー知らないの?

960 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 19:52:58.88 ID:S7ay6emt0.net]
野球の漫画だっけ



961 名前:デフォルトの名無しさん [2021/12/18(土) 20:24:25.92 ID:S/VVluSn0.net]
それはダイエーじゃなくて地獄甲子園。

962 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 21:06:03.74 ID:XqEkP9jw0.net]
もう25年前に近くのダイエーなくなってダイクマになった(もうそれもなくなってマンションになってるけど)
一駅先にグルメシティの形で残ってるけどほとんど行かない

963 名前:デフォルトの名無しさん [2021/12/18(土) 21:30:26.72 ID:S/VVluSn0.net]
ヒントもう無いの?

964 名前:デフォルトの名無しさん [2021/12/18(土) 21:39:28.14 ID:S/VVluSn0.net]
ここまでの情報で、神奈川県秦野市ではないか?と自作AIがはじき出しましたが。
あってる?

965 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 21:44:58.76 ID:XqEkP9jw0.net]
>>949
合ってる
ダイクマ発祥の地なのでAIなら楽勝かとw

966 名前:デフォルトの名無しさん [2021/12/18(土) 21:45:33.86 ID:S/VVluSn0.net]
おおおお!!
あってた!!

967 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 21:47:56.30 ID:ruUAvqsCd.net]
神奈川県秦野市の東海大学前のグルメシティは、元は忠実屋というスーパーだった
ダイエーに買収された後グルメシティに変わった
ステッカーの下には今でも忠実屋のロゴマークが残ってる
店の床に小さい段差があるのは増築した痕跡

968 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 00:46:13.19 ID:1w97E/wVM.net]
ほんとおまいら、昔話が大好物だな

969 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 01:41:02.09 ID:SLVervUs0.net]
ジジイしかいないスレ
VBAなんていまだにやってるのは、ジジイくらいしかいないか

970 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 01:45:35.49 ID:F1jZtUeQ0.net]
二十歳こえたらみんなジジイだよ



971 名前:デフォルトの名無しさん [2021/12/19(日) 02:09:49.49 ID:WKKxXwhHa.net]
左様でござるか

972 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 05:36:03.45 ID:9cYlynLW0.net]
ダイクマって
あの「ダイナミックダイクマ〜!!」の
ダイクマ?

973 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 07:00:08.37 ID:LtRjW0Zk0.net]
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

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

今までご親切にお教えいただいた構文を生かしてなく申し訳ありません。

974 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 07:01:14.70 ID:LtRjW0Zk0.net]
>>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
>
> ここで色々お教えいただきそれらの構文を自分なりに組み合わせてみたのですが
> 初心者の私にはレベルが高すぎるようで・・・
>
> 今までご親切にお教えいただいた構文を生かしてなく申し訳ありません。

975 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 07:03:44.45 ID:LtRjW0Zk0.net]
間違えがありましたので連続投稿になってしまいましたが
ご教授ください

976 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 07:04:33.84 ID:LtRjW0Zk0.net]
>>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
> >
> > ここで色々お教えいただきそれらの構文を自分なりに組み合わせてみたのですが
> > 初心者の私にはレベルが高すぎるようで・・・
> >
> > 今までご親切にお教えいただいた構文を生かしてなく申し訳ありません。

977 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 07:05:30.07 ID:LtRjW0Zk0.net]
hの位置がずれていました
朝から連続投稿すいません!

978 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 07:40:00.27 ID:F1jZtUeQ0.net]
必要な仕様が足りない
・B2よりB1が大きい場合は動作しない?それとも翌月のその日までを記載?
・B1,B2に入力された数値が日付として有り得ない場合はどうする?動作しないだけでよいのか?
・年の判定はどうする?現在の年を使用してよいのか?

979 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 08:34:48.49 ID:J5v8c1sd0.net]
>>958前スレで見た

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

980 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 08:38:14.07 ID:J5v8c1sd0.net]
最初は782で結局やりたい事は
https://mevius.5ch.net/test/read.cgi/tech/1626565335/829
これだったと



981 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 15:48:07.81 ID:LtRjW0Zk0.net]
>>963
> 必要な仕様が足りない
失礼しました
> ・B2よりB1が大きい場合は動作しない?それとも翌月のその日までを記載?
B1の方が大きければ空白になってくれればいいのですが
エラー表示がセルに表示されてもエラーはエクセルの設定で空白にできるので大丈夫かと思っています

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

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

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

説明下手ですいません (汗 

982 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 17:22:51.01 ID:6V5J9+AZ0.net]
Dim a(10,20)
a(1,2)=3

上で2行目の1や2の数字のことを何て言うのでしょうか
初歩の質問で申し訳ありません。

983 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 17:50:26.31 ID:XeEcFWJL0.net]
ひきすう?

984 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 17:53:41.03 ID:KHFMKFNKM.net]
>>967
添え字かな

985 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 18:27:21.36 ID:pq+sPc2G0.net]
あるソフトウェアが出力する
ログファイル(テキストファイルで行数は不定)をスペース区切りで文字列として読み込むコードを書いているのですが
ログファイルの先頭行のスペースの数が一定ではなく
単純に読み込むと先頭の数値が
A列目に入ったりB列目、C列目に入ったりして困っております

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

皆様のお力添えをお願い致します

986 名前:デフォルトの名無しさん [2021/12/19(日) 18:43:59.87 ID:pq+sPc2G0.net]
>>970
自己レス

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

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

先頭(左端)に連続して入っているスペースを無視する方法しか
無いかもしれません

987 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 18:56:32.68 ID:RC6G9Zkh0.net]
何をしたいのかよくわからんけどちゃちゃっとやるなら正規表現使え
https://codezine.jp/article/detail/1655

988 名前:デフォルトの名無しさん [2021/12/19(日) 19:02:03.97 ID:oG6IuvVy0.net]
ルビー基地外だぞ

989 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 19:04:40.91 ID:9cYlynLW0.net]
>>971
LTrimでググれ

990 名前:デフォルトの名無しさん [2021/12/19(日) 19:08:52.05 ID:pq+sPc2G0.net]
連続レス申し訳ありません

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

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

といったものになると思います
何卒ご助力お願い致します



991 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 19:46:59.93 ID:sZ+QwmZV0.net]
>>975
それって固定長じゃないの?
全銀データみたいな奴
固定長なら、文字数数えて、データ区切り使ったほうが早いと思う

992 名前:デフォルトの名無しさん [2021/12/19(日) 20:17:13.17 ID:pq+sPc2G0.net]
皆様ご回答ありがとうございます

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

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

>>976
ありがとうございます
途中でエラーメッセージ行とかが
入るので全ての行が固定長
と言うわけではないのですが
データを処理したい行は固定長に近いです
問題は処理したい行の先頭に0〜3個のスペースが入ることです

993 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 20:33:08.86 ID:Ax4UFlXX0.net]
>>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
-----------------------------

994 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 20:40:17.69 ID:6V5J9+AZ0.net]
>>968-969
ご回答ありがとうございました

995 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 20:44:00.34 ID:F1jZtUeQ0.net]
>>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

996 名前:デフォルトの名無しさん [2021/12/19(日) 20:57:27.62 ID:pq+sPc2G0.net]
>>978
ありがとうございます

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

その際
----------------
arr=Split(str," ") '空白で分割し配列に格納
----------------
だとデータ行中に空白が連続している場合
例えば
a b c d
のような場合でも
A列→a
B列→b
C列→c
D列→d
のように入力可能でしょうか?

997 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 21:13:00.94 ID:LtRjW0Zk0.net]
>>980
わかりづらい説明にご親切にありがとうございます
感謝!
今から試したいと思います!

998 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 21:22:20.20 ID:o7hmg8oNM.net]
>>981
そんなもんマクロの記録で連続する区切り文字は1文字として扱うオプション使えばいいでしょ

999 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 21:39:11.49 ID:EkrjUmtA0.net]
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 は、文字列の先頭・末尾から、連続した空白類を除去する

1000 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 21:42:45.37 ID:tlLDAcl00.net]
今時、rubyとか使ってんじゃねーよ



1001 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 21:51:18.70 ID:LtRjW0Zk0.net]
>>980
すみません
今試してみました
C列には期間の日が表示され
D列には機関の月日が表示され

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

私にはなにをどうしたらいいのかまったくわかりませんでした
技術的にむずかしいでしょうか?
ググってみましたが出来そうにないです

1002 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 22:12:20.36 ID:Ax4UFlXX0.net]
>>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

1003 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 23:20:35.00 ID:2A/aI1dD0.net]
>>981
これで代入できる
Range("A1:D1") = Split(str, " ")

1004 名前:デフォルトの名無しさん [2021/12/19(日) 23:23:16.74 ID:oG6IuvVy0.net]
相変わらずRuby基地外に引っ掛かる馬鹿ども

1005 名前:デフォルトの名無しさん [2021/12/19(日) 23:33:22.46 ID:pq+sPc2G0.net]
>>983

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

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

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

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

のような場合でも
そのコードは使えますでしょうか?

1006 名前:デフォルトの名無しさん [2021/12/19(日) 23:36:15.57 ID:pq+sPc2G0.net]
>>988
ありがとうございます

この場合も処理可能でしょうか?
a b c d
a b c d
a b c d

1007 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 23:41:22.83 ID:kIFouMiR0.net]
ファイルを開いてVBAで処理する系は
VBAのエディタがアップデート放棄しててユニコードに対応しないらしいのでやめた方がいいかも

Regexpでユニコード文字列を置き換える処理をこさえたりすればなんとかなるかもしれないが

1008 名前:デフォルトの名無しさん [2021/12/19(日) 23:51:29.72 ID:pq+sPc2G0.net]
>>992
ご注意ありがとうございます
私の場合であれば処理するlogは
ASCIIのみなので問題ないかと思います

1009 名前:デフォルトの名無しさん mailto:sage [2021/12/20(月) 01:25:47.26 ID:x5N85HfoM.net]
replace(hoge," "," ")

1010 名前:デフォルトの名無しさん mailto:sage [2021/12/20(月) 01:39:15.08 ID:jnlr9GaR0.net]
>>986
ごめん
ちょっと何を言っているのか分からないからもう少し整理してから言葉にして
文字列や日付として破綻しているものでも可なのにその期間を出力せよっていうのはどういう意味?
仕様がちぐはぐで何をしたいのかが分からない

出力列を増やすのはのは対して手間は変わらないから自分でアレンジして
分からないならもっと基礎の部分を勉強するか諦めて関数式書いた方が早いよ



1011 名前:デフォルトの名無しさん mailto:sage [2021/12/20(月) 01:41:34.12 ID:jnlr9GaR0.net]
次スレ
Excel VBA 質問スレ Part74
https://mevius.5ch.net/test/read.cgi/tech/1639932059/

1012 名前:デフォルトの名無しさん mailto:sage [2021/12/20(月) 07:39:37.83 ID:sc4Jjnxw0.net]
>>996


1013 名前:デフォルトの名無しさん mailto:sage [2021/12/20(月) 10:40:58.57 ID:2126b9QK0.net]
>>995
前スレ見たらわかるけどそいつ後出し後出しで
しかも前スレで得た知識も抜きで再質問してる

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

>>996
乙!

1014 名前:デフォルトの名無しさん mailto:sage [2021/12/20(月) 21:13:06.47 ID:1VhmJElm0.net]
>>995
すいません
関数を使ってみたいとおもいます
これか自分で勉強しレベルを上げていきたいと思います
あなたのおっしゃるとおりだと思います
今までお教えいただいたことを参考に
勉強していきたいと思います
ここの先生たちには本当に感謝しています

1015 名前:デフォルトの名無しさん [2021/12/20(月) 21:21:42.29 ID:XrZMAyhid.net]
いつものあいつ

1016 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 98日 13時間 51分 43秒

1017 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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