22/06/27 07:42:09.30 /YUVVdlZD.net
インデント揃えてれば良いんじゃない?
それかある程度深くなったら別ルーチンや関数に飛ばすとか
709:デフォルトの名無しさん
22/06/27 07:44:02.36 cx09ANOo0.net
if a=1 and b=1 and c=1
にすればすっきり
710:デフォルトの名無しさん (スプッッ Sdbf-tCSL)
22/06/27 08:00:18 qwmHCu1Hd.net
>>700
VBAはショートサーキットじゃないから遅くなる
711:デフォルトの名無しさん (ワッチョイ 3f01-DrrO)
22/06/27 08:05:04 3L19Fpz+0.net
>>695
それどこかに書いてある?
まあ予約語や数字始まりがダメなのはわかるけどセルアドレスは盲点だわ
712:デフォルトの名無しさん
22/06/27 09:20:29.88 WYWqaC3Yd.net
>>698
何がしたくてそのIF文を書いてるかわからないけどELSEに対しての記述がなければ>>700みたいな書き方にしてもいいけど
自分はその程度のネストは許容範囲だけどね
それとなんでしないほうがいいと思ったかも書くと他の回答もらえるかもね
713:デフォルトの名無しさん
22/06/27 09:26:36.50 iDqL/u9w0.net
年取ると4階層なんかもう見たくない
714:デフォルトの名無しさん
22/06/27 09:27:26.36 HPVEPi/ad.net
Excel2021でも再現したわ
セル番地はモジュール名にできないのか、知らんかった
捨て変数とか作業ファイル名なんか普通にaaa1とか使ってるから、いつひっかかってもおかしくなかったのに
思い返してみると、なぜか捨てSubはtest1とかmacro1にしてた
715:デフォルトの名無しさん
22/06/27 09:31:15.07 iDqL/u9w0.net
今わかってる範囲では、モジュール名にできるけど挙動が少しおかしくなる
避けられるなら避けたほうが無難だろうね
716:デフォルトの名無しさん
22/06/27 09:34:13.54 Kt0Hv+oPd.net
>>692
英字1文字でも3文字でも飛ばされる
なんかの裏技に使えそうな気がする
遠くのセル範囲をちょっと確認したいとか
717:デフォルトの名無しさん
22/06/27 09:36:09.63 kVADuAyl0.net
>>698
いわゆる早期リターンとかガード節ってやつ
For Each i In Collection
If a <> 1 Then GoTo continue
If b <> 1 Then GoTo continue
If c = 1 Then
Debug.Print "OK"
End If
continue:
Next
718:デフォルトの名無しさん
22/06/27 09:50:33.84 WYWqaC3Yd.net
>>708
自分としてはもともとの判定を変更するような回答はどうかと思ったりするんだよね
複雑怪奇とかいてるのでわかりやすい回答なら「if not (a = 1) then」にしたほうがいいのではないかと
それとそこまで書いたらcの判定もcontinueで飛ばしたほうがすっきりするかと
719:デフォルトの名無しさん
22/06/27 09:53:16.46 H4LNDdnJ0.net
>>707
マクロじゃなくてジャンプでいいってなるんじゃ
720:デフォルトの名無しさん
22/06/27 10:00:09.47 Do3p35pda.net
>>698
内容がわかるようにコメントつければいいんじゃね
721:デフォルトの名無しさん
22/06/27 10:15:26.20 3L19Fpz+0.net
>>705-706
モジュール名にはできないけど>>694のは手続き名だからモジュール名で修飾(※)すれば呼び出せるよ
※ マクロ名の欄に直接 Module1.n98 のように入力する
722:デフォルトの名無しさん
22/06/27 10:19:02.79 iDqL/u9w0.net
>>712
スマン、勘違いしてた
723:デフォルトの名無しさん
22/06/27 10:24:13.47 3L19Fpz+0.net
>>698
一般論としてネストは浅い方が理解しやすいからそのコードであれば>>700や>>708みたいにした方が読み易い
ただ>>701が言うようにVBAにはショートサーキット(短絡評価)がないので遅くなるのはいいとしても
If N <= UBound(A) And A(N) = 1 Then ...
みたいなのは
If N <= UBound(A) Then
If A(N) = 1 Then ...
のようにする必要がある
724:デフォルトの名無しさん
22/06/27 10:29:53.48 kVADuAyl0.net
まあ、複雑な判定するならメソッドに切り出すのが間違いないわな
VBEだとIDEのサポートないから若干めんどくさいけど
725:デフォルトの名無しさん
22/06/27 11:00:14.42 tRNW+/P90.net
>>698
賛否あると思うが
For Each i In Collection: Do
If a <> 1 Then Exit Do
If b <> 1 Then Exit Do
If c <> 1 Then Exit Do
Debug.Print "OK"
Loop: Next
みたいな書き方もある
726:デフォルトの名無しさん
22/06/27 11:01:13.33 tRNW+/P90.net
最後の行間違えた
Loop Until 1: Next
727:デフォルトの名無しさん
22/06/27 11:05:37.12 zkyvRAcfa.net
あんまりにもネストするなら、判定文(if複数)だけ別プロシージャ(Function)として外出しして、TrueかFalseを返させるようにするかな
IsGoukaku みたいなプロシージャ名にすると何したいかがわかってメンテ楽だし
728:デフォルトの名無しさん
22/06/27 11:29:16.42 gUdOjGv30.net
セル番地がダメならダメでいいけど、あんな挙動をするのはバグだよ。
本来はメッセージだして弾くべきじゃね?
office365でも同じならだれかMSにチクってみてくれ。
以前、MSの掲示板にWinの不具合を書いたら、
速攻で消されたが、
こっちでも確認できたから開発にレポしといたていうメールが来て感動したわ。
729:デフォルトの名無しさん
22/06/27 11:31:14.56 iDqL/u9w0.net
>>719
365でも同じだよ
730:デフォルトの名無しさん
22/06/27 11:34:53.87 gUdOjGv30.net
>>700
if a=1 and b=1 and c=1
にすると内部では判断を3回することになる。
if a=1 then
if b=1 then
if c=1 then
にすると判断は少なくなるのだから、ネストするほうが正解じゃね?
もちろん、ifを書く順番は判定が少なくするようにする必要はあるが。
731:デフォルトの名無しさん
22/06/27 11:48:23.44 Fr547gX6r.net
>>719
ゆうてVBAとかアプデすんの?
732:デフォルトの名無しさん
22/06/27 11:52:04.31 iDqL/u9w0.net
してるよ
733:デフォルトの名無しさん
22/06/27 11:52:52.11 nfvw1vkN0.net
セキュリティ以外で?
734:デフォルトの名無しさん
22/06/27 11:57:18.86 iDqL/u9w0.net
うん
735:デフォルトの名無しさん
22/06/27 11:59:27.42 iDqL/u9w0.net
頻度はwindoewsやエクセルに比べたらかなり低いけど、やってるよ
確かちょっとずつ便利になってる。本当にちょっとだけ。関数が増えたりはしていないはず。
ソース探したけど見つからねぇ
736:デフォルトの名無しさん
22/06/27 12:02:08.29 nfvw1vkN0.net
ふーん。。
まあ元号はあったね。。
古臭いよね。。
737:デフォルトの名無しさん
22/06/27 12:04:52.44 nfvw1vkN0.net
言語仕様っぽいページはあった
URLリンク(docs.microsoft.com)
結局代替がないからなあ
738:デフォルトの名無しさん
22/06/27 13:50:25.11 FDoLWwM/d.net
>>718
俺も大体これでやってる
739:デフォルトの名無しさん
22/06/27 19:05:07.99 IOT9Z53O0.net
>>698
そもそもi使ってねーじゃん
740:デフォルトの名無しさん
22/06/27 19:57:12.47 UdQiWAN30.net
どなたか教えてください。
売掛金消し込みのマクロを作成しています。VBAでソルバーを自動化したいと思っています。
目的セル、制約条件の参照セルの開始行が40行ごとに下がっていき、指定値は数値ではなく、セルを指定したいです。
とりあえず、全部の変数をvariant型にしてますが、なかなか上手くいきません。
741:デフォルトの名無しさん
22/06/27 20:18:45.52 UdQiWAN30.net
731です。
sub ソルバー()
dim 振込1 as variant
振込1=worksheets("ソルバー").range("n2:n8")
solverok setcell:= worksheets("ソルバー").range("i3"),
maxminval:=3,
valueof:=振込1,
bychange:=worksheets("ソルバー").range("e2:e40"),
enginedesc:="grg nonliner"
solveradd celreff:=worksheets("ソルバー").range("e2:e40"),relation:=4
solversolve userfinish=true
742:デフォルトの名無しさん
22/06/27 20:22:23.17 jYXkLZ/o0.net
で、何がうまくいかないの?
743:デフォルトの名無しさん
22/06/27 20:26:50.30 UdQiWAN30.net
>>733
ソルバーを実行しても、目的セルが0のままで指定値にと一致する金額の組み合わせが見つかりません。
どの請求分の入金なのか、突合したいです。
744:デフォルトの名無しさん
22/06/27 20:35:36.69 9IVJ+eiIa.net
>>734
ソルバーわからんから確認させてください
振込1って変数は配列に入れた値を指定したいものですか?それともセル自体を指定したいものですか?
前者であればそれでいいですが、後者なら変数はRange型にする上で代入時に
Set 振込1 =〇〇
としないといけませんが…
745:デフォルトの名無しさん
22/06/27 20:37:19.75 UdQiWAN30.net
連投すみません。
変数宣言して、for〜next構文でe列を("e"&i+40)や、n列も("n"&i+40)みたいにしたいんです。
d列には請求金額、e列は空白、目的セルにはsumproduct関数が入ってます。
指定値セルはn2:n8で、それぞれ違う金額が入力されてます。入金額とn2:n8内の金額が一致する組み合わせの請求金額をVBAを使って、求めたいです。
746:デフォルトの名無しさん
22/06/27 20:39:44.13 UdQiWAN30.net
>>735
ありがとうございます。
ヘルプを確認したら、指定値はバリアント型で書けとあったので、なんとなくvariantにしていました。
747:デフォルトの名無しさん
22/06/27 20:45:55.27 qw9z/asOd.net
>>737
マルチ死ね
748:デフォルトの名無しさん
22/06/27 20:58:49.57 jYXkLZ/o0.net
とりあえず、rangeで回すんじゃなくてcellsで回したら?
n列はcells(i,14)
e列はcells(i,5)で
749:デフォルトの名無しさん
22/06/27 21:09:33.28 UdQiWAN30.net
>>739
sub または functionが定義されませんエラーが出ます…
750:デフォルトの名無しさん
22/06/27 21:10:43.06 UdQiWAN30.net
>>739
cellsも以前試したんですが、上手いこといきませんでした
751:デフォルトの名無しさん
22/06/27 23:45:06.09 8dHt2RWvM.net
こんな奴が作るプログラムで金勘定とか笑えるわ
己を知らないって馬鹿の特徴なんだよな
752:デフォルトの名無しさん
22/06/28 00:04:39.14 41/DPGawd.net
ソルバーってカタカナで書くの余計分からないよ
素直にSolverで良いだろうに
上の困ってるのは一旦マクロの記録で動作確認お薦め
753:デフォルトの名無しさん
22/06/28 00:07:49.75 bUNh/khy0.net
>>742
2行目はよく解る www
754:デフォルトの名無しさん
22/06/28 05:51:37.94 kKObdKOQ0.net
オレオレ詐欺の手伝い?
755:デフォルトの名無しさん
22/06/28 07:36:23.45 XbsSoqMza.net
>>736
なんで会計ソフト使わないの?
756:デフォルトの名無しさん
22/06/28 07:54:25.17 2SIMEAUf0.net
Excelは万能ではないから会計ソフトでやるべき事柄
757:デフォルトの名無しさん
22/06/28 08:48:25.11 8yuWSL180.net
この世で最高のコードを見かけた
With Range("F27:F56")
.Value = .Value
End With
758:デフォルトの名無しさん
22/06/28 09:10:04.94 3ZxXgE6I0.net
>>748
それの意味解る?
ちょっと前に同じ様なコード載せてた人いたけど
複数範囲は一度に設定できないって嘆いていたよ
759:デフォルトの名無しさん
22/06/28 09:10:36.27 a//tJk240.net
>>732
solverを使うときのパラメーターの設定の方法が間違ってんじゃない。多分値渡しではなくsetを使うと思うよ。
まずマクロの記録もう使ってなんでもいいからsolverで問題を解いてみて、solverを使うときの正しいVBA の書き方を確認しなさい。
760:デフォルトの名無しさん
22/06/28 09:52:29.46 qOxYqvDuM.net
>>698
Ifなんたらかんたらを使わないで
B2になんか文字が入っていたらC2を
B3になんか文字が入っていたらC3を…
をスマートに書くならどう書きます?
URLリンク(i.imgur.com)
761:デフォルトの名無しさん
22/06/28 11:02:29.10 1UWi0IGcd.net
>>751
こんな質問してマウントとりたいんだろうか・・・
こんな質問するならそのスマートな回答も書いておけばいいのに
762:デフォルトの名無しさん
22/06/28 11:15:10.25 cqDrGvOU0.net
VBA使わなくてもセルに関数書いときゃいいんじゃね
763:デフォルトの名無しさん
22/06/28 12:14:32.96 S7aFTH1NM.net
>>751
お前Access VBAスレにExcelの質問書き込みするんじゃねーよ
迷惑だ
764:デフォルトの名無しさん
22/06/28 17:20:05.57 mlWlUbMB0.net
すみません、神様達、教えてください
エクセルVBAでは
関数内関数はどうやって作れますか?
また複数の関数を目的別に整理する方法として
パッケージやモジュール単位にまとめたり
マップに収納したりはできるのでしょうか?
765:デフォルトの名無しさん
22/06/28 17:52:33.73 fjXXNeRNM.net
>>755
できる
vbeエディタウインドウを凝視しているとやり方が判るはず
766:デフォルトの名無しさん
22/06/28 17:59:52.62 8yuWSL180.net
>>756
具体的にやり方を教えてあげなよ
767:デフォルトの名無しさん
22/06/28 18:51:45.14 gpLDnVSMr.net
>>755
関数内関数ってこれのこと?
URLリンク(www.sejuku.net)
768:デフォルトの名無しさん
22/06/28 19:15:28.84 +0CREnk7H.net
>>756
ちょっと凝視してみます
>>758
疑似コードですけど例えば、
Function out()
Function in1()
End Function
Dim a=Function in2()
End Function
out=Array(in1,a)
End Function
みたいな感じで
関数outの中に関数in1を宣言したり
変数に関数を代入して、returnしたりしたいのです
769:デフォルトの名無しさん
22/06/28 19:22:25.73 EFCYXnQm0.net
ローカル関数もサポートされてないし
関数をオブジェクトとして扱えないので変数への代入も無理です
770:デフォルトの名無しさん
22/06/28 19:22:27.90 +0CREnk7H.net
>>756
標準モジュール単位で関数をまとめればいいってことでしょうか?
771:デフォルトの名無しさん
22/06/28 19:29:24.91 +0CREnk7H.net
>>760
ありがとうございます
なるほどです
すっきりしました、神様ありがとう
モジュールを使いながら関数を整理するか
関数用にファイルを作って管理するかします
772:デフォルトの名無しさん
22/06/28 20:14:33.61 a//tJk240.net
>>761
正解です
773:デフォルトの名無しさん
22/06/28 20:14:53.99 a//tJk240.net
それからモジュールには適当に名前を付けることができますので
774:デフォルトの名無しさん
22/06/28 20:17:06.37 8yuWSL180.net
関数内関数ってのは、関数の中で定義する関数のこと
phpだと
sub foo1
if a = b then
sub foo2
foo2=1
end sub
else if
sub foo2
foo2=2
end sub
end sub
みたいなことができる
あんまやらんけど
775:デフォルトの名無しさん
22/06/28 20:22:34.06 a//tJk240.net
>>759
関数内関数をそこで書いているようなやり方ではできないけれど、どうしてもやりたければ vbe オブジェクトを定義してそこにコードを書き込むという疑似なやり方はできる。あるいはコードを作成するプロシージャを作成してそのプロシージャを呼び出して引数を渡してコード作った後、そのコードを呼び出すみたいなことはできるのかもしれない。
コードを実行中に別のコードを作成するという経験がないんでエラーが出るかどうかは分からない。
ただ面倒だし見通しも悪くなるんで外側で関数を定義した方が簡単だと思うんだけれどなぜ関数の中で関数を定義したいのでしょうか。
776:デフォルトの名無しさん
22/06/28 20:32:39.05 +0CREnk7H.net
>>766
ありがとうございます
vbaがエクセル前提の言語と考えると
私が考えているような関数は使うべきでもないのだなって思いました
神様たちのアドバイスに感謝です
ありがとうございました
777:デフォルトの名無しさん
22/06/28 20:42:12.06 +0CREnk7H.net
>>765
ありがとうございます
778:デフォルトの名無しさん
22/06/28 20:50:26.07 +0CREnk7H.net
>>766
なぜ関数の中で関数を定義したいのか
すべての関数を同列に記載すると見通しが悪い気がして
例えば数式に関するものなら、calcurationでまとめ
出力に関するものなら、printでまとめ
保存に関するものなら、saveでまとめ
っていうように、目的別、機能別、階層別に関数をまとめると
後で見直したときに分かりやすいかなって
さらにfacadeみたいに間口を作れば
拡張も修正もしやすいかなって思いまして
779:デフォルトの名無しさん
22/06/28 20:56:44.33 8yuWSL180.net
>>755
>関数内関数はどうやって作れますか?
関数内関数はない
classは貧弱だけど、ある
ただvbaそもそもの概念として、エクセルのスクリプトであるという点がある
あんまり大きなclass作りたいなら、別言語の方が良いと思う
エクセルvbaはゲームとかもキツイ(メインloopが超貧弱でvbaを起動しっぱなしだとよく落ちる)
>また複数の関数を目的別に整理する方法として
>パッケージやモジュール単位にまとめたり
>マップに収納したりはできるのでしょうか?
標準モジュール単位でまとめられるけど・・・
エクセルvbaの標準モジュールは「どのシートにも共通する処理」のような意味合いで用いられる
よくも悪くも、vbaはエクセルのためにあるので
あまり壮大な事をするのには向いていない
780:デフォルトの名無しさん
22/06/28 20:59:53.87 +0CREnk7H.net
>>770
class調べてみます!
モジュールとclassが使えれば
見やすいコードかけるかも!
そんな壮大なプログラムを作るつもりなないのですけど
一処理、一関数にしたいとなると
ある程度の単位で処理をまとめていきたいなって
ご丁寧なご解説に感謝です
ありがとう、神様!
781:デフォルトの名無しさん (ワッチョイ ff02-tQxS)
22/06/28 21:13:22 i28fB/zi0.net
>>750
アドバイスありがとうございます!
入金消し込みの自動化をせよと上司からの指示で、初心者なりになんとかやってるんですが、会計ソフトの会社でもお手上げな仕組みの売掛金管理のようです。
setとcellsでなんとか、試行錯誤してやってみようと思います!
またわからなくなったら、質問させて頂きます。
782:デフォルトの名無しさん (アウアウウー Sad3-/ybv)
22/06/28 21:26:40 WQvDBuzoa.net
十年近くぶりに触るし上級者だったとかじゃないけど
VBAで
今開いてるPhotoshopの選択しているレイヤーを基準にExcelの指定セル範囲(例:A1からA20)を1セルごとにレイヤーを1枚作りセルの中身を文字ツール(テキスト)でレイヤーを作成。
例:ExcelのA1に「あいう」、A2に「えお」、A3に「123」が入力されていたとし、指定範囲選択(A1〜A3)を、開いてるPhotoshopにレイヤー追加しながらテキストレイヤー「あいう」、「えお」、「123」を作る(計3枚)。その際、Excelに近い見た目の形で…この場合、横に少し間隔を空けて「あいう」「えお」「123」が並ぶように作成する。(文字の大きさや色は直前に使ったpxサイズ、色とする)
って出来ますか?
783:デフォルトの名無しさん (ワッチョイ 3f4f-60CD)
22/06/28 21:45:50 3ZxXgE6I0.net
いや、関数内関数?
まぁ似たようなものはあるよ。
GOSUBってのが。
ただ、これも負の遺産のひとつだから
あまり使うことはお勧め出来ないけど。
784:デフォルトの名無しさん
22/06/28 21:52:47.26 /U22FX/80.net
gosubは全然違うでしょ
785:デフォルトの名無しさん
22/06/28 22:11:43.10 GB8Zx7jKM.net
関数内関数いわゆる高階関数について、VBA関数には高階関数のための機能は無いけどワークシート関数のLAMBDAが該当する
786:デフォルトの名無しさん
22/06/28 22:18:47.50 8yuWSL180.net
確かに!その発想は正解だが・・・だが・・・
787:デフォルトの名無しさん
22/06/28 23:36:42.40 EFCYXnQm0.net
>>773
COM経由で操作できるっぽい。こんなのが引っかかった
URLリンク(minatoya.work)
788:デフォルトの名無しさん
22/06/29 07:26:36.96 f9LCV9hba.net
>>776
お前名前に騙されやすいタイプだろw
LAMBDA は単なる関数定義で VBA スレ的にはユーザー定義関数と変わらんぞ
ユーザー定義関数はマクロブックにしか入れられないから LAMBDA が作られた
789:デフォルトの名無しさん (ワッチョイ 7fda-eqyh)
22/06/29 08:15:54 SMNkprrA0.net
他のプログラミングと同じだと思われているのかな LAMBDA 関数は
790:デフォルトの名無しさん
22/06/29 08:48:09.67 sZpGYWcf0.net
ユーザー定義関数では(コーディング時に)関数を自作することはできるが、(実行中に)関数内で関数を定義したり
(実行中の)関数の引数に関数そのものを与えるたりすることはできない
そもそもユーザー定義関数とLAMBDA関数はまったく別のもの
Excelの新関数「LAMBDA」(ラムダ)が一般提供開始 ~Excel数式が本格的なプログラミング言語に
URLリンク(forest.watch.impress.co.jp)
791:デフォルトの名無しさん
22/06/29 08:51:20.38 GuRBEGnka.net
>>778
ありがとう
そこのページ起点に頑張ってみる
792:デフォルトの名無しさん
22/06/29 08:55:02.95 8rr9zLPCM.net
関数型パラダイムをサポートしている言語か、最低でもC言語などで関数ポインタを使ったことがある人でないと高階関数の概念は理解が難しい
793:デフォルトの名無しさん
22/06/29 10:34:47.30 7c8LgVFIa.net
privateで良くないか
794:デフォルトの名無しさん
22/06/29 12:27:16.10 f9LCV9hba.net
>>781
高階関数の話ならそこに書いてあるMAPとかSCANがLAMBDAを受けられる様になったことを言うべき
あと関数内関数と高階関数は全く別物だし実行中に定義できるか
795:かどうかも関係がない
796:デフォルトの名無しさん
22/06/29 13:48:20.01 Es0nfTu8a.net
記者がアホなんやで
797:デフォルトの名無しさん
22/06/29 14:05:01.02 SMNkprrA0.net
ネットの記事って怪しかったり間違っているのが多々あるよね
798:デフォルトの名無しさん
22/06/29 14:22:16.06 3IrndTU40.net
ネットの記事だけがそうだと思ってる?
799:デフォルトの名無しさん
22/06/29 14:30:17.44 par7A0IW0.net
はい次の方
800:デフォルトの名無しさん
22/06/29 14:59:30.13 0RCF24VI0.net
.Netでもひとつの壁と言われているラムダ式が
VBAどころかEXCELで使えるようになるのか。
胸熱だが脱落者も増えるだろうな。
801:デフォルトの名無しさん
22/06/29 15:07:56.16 Ajq9RLSRM.net
一般的な意味での高階関数は数学的な抽象概念としての話ではあるけど、プログラム言語としては第一級関数の実装のことを言う場合が多い
(C言語の関数ポインタのように擬似的に実現する方法もある)
高階関数
URLリンク(ja.wikipedia.org)
第一級関数
URLリンク(ja.wikipedia.org)
802:デフォルトの名無しさん
22/06/29 15:09:05.56 JurptZkT0.net
脱落者なんて増えないさ
世の中にエクセルの全機能使いこなしてる奴なんていないからな
理解できない機能は使われないだけだよ
803:デフォルトの名無しさん
22/06/29 17:35:51.56 0RCF24VI0.net
>>791
読んでてよく分からんかったけど
要はアセンブラでいうところのアドレスの間接参照とか
間接修飾とか言われているやつで
.NetではDelegate、VBAではCallByNameによるコールバックって理解でいい?
804:デフォルトの名無しさん
22/06/29 17:43:32.68 8wQcCZ0gd.net
VBAでできない事をダラダラと話さず別スレいけばいいのに
805:デフォルトの名無しさん
22/06/29 17:56:17.53 vfJ3sAv3M.net
Excelで例えるなら関数を特定のオブジェクトのメソッドとしてではなく、それ自体を実体のあるオブジェクト(あるいはコレクション)と見做すようなもの
利用側の関数内で関数オブジェクト(のようなもの)を参照する手段として関数そのものをラムダとして扱う
806:デフォルトの名無しさん
22/06/29 18:54:09.74 zPLPBKg6H.net
エクセルもVBAも詳しくないんですけど
VBAは非同期処理でコールバック関数を使わないんですか?
807:デフォルトの名無しさん
22/06/29 19:06:05.99 tW8kR1cqM.net
イベント駆動型ですから
808:デフォルトの名無しさん
22/06/29 19:13:20.08 i0xj9Opya.net
>>794
高階関数っていうのを最近覚えたんだろうな
関数内関数に1mmも関係ないのにしつこく語ってる
他の言語スレだと瞬殺されるレベルだからこんなスレで管巻くしか無いんだろうw
809:デフォルトの名無しさん
22/06/29 19:15:29.13 uu2mw40gD.net
>>796
使おうと思えば使える
810:デフォルトの名無しさん
22/06/29 21:47:59.24 zPLPBKg6H.net
>>799
コールバック関数を使えるのなら
引数に関数参照できるということです?
なら変数に関数を代入できそう
811:デフォルトの名無しさん
22/06/29 21:55:21.60 zPLPBKg6H.net
>>797
非同期処理はイベント処理に依存してるってことでしょうか?
コメントありがとうございました
VBA初心者なのでいろいろ勉強していきます
812:デフォルトの名無しさん
22/06/29 22:13:03.71 sZpGYWcf0.net
>>800
特定のオブジェクトやクラスに所属する関数やAPIなどシステムで定義された関数(メソッド)であればコールバック関数で参照することはできる
グローバルのユーザー定義の関数はラムダ式で記述するなどの手段を使わない限りは無理
813:デフォルトの名無しさん (ワッチョイ 4f2f-BYhf)
22/06/29 22:45:43 JurptZkT0.net
コールバック「関数」とはなにを指してるんだろうかねぇ
コールバックを実現する手段はイベント以外に
CallByNameとかApplication.Runとかでまあ実現できなくはない
814:デフォルトの名無しさん (JP 0Ha3-tCSL)
22/06/29 22:55:30 zPLPBKg6H.net
コールバック関数は何を指しているのか
なぜラムダ式が存在するのか
即時関数とラムダはどこから分岐していったのか
関数プログラミングは本当に有益なのか
本当に変数は悪者で動的型付けは悪なのか
それらはもはや哲学なのかもしれません
815:デフォルトの名無しさん (ワッチョイ ff68-TsA2)
22/06/29 23:01:15 L0Xzxy470.net
慣れれば別にどっちでも・・・って感じになるけどな
816:デフォルトの名無しさん
22/06/29 23:50:10.86 HQQahVZ60.net
>>783
自作の階乗作らせりゃ一発だろ。Cの関数へのポインタとか、可読性0に近い。組んでて楽しいけど、1ヶ月後の自分はこれを理解できるだろうかという疑問が湧くw
817:デフォルトの名無しさん
22/06/30 05:47:49.15 P7B/AZjs0.net
まぁでもあんまりVBAでコールバック使う機会ないかな
呼び出しや生成元のモジュール側の関数を
呼び出された側や生成された側から呼び出すときに
密結合になるのを避けるためくらいにしか使ってない
818:デフォルトの名無しさん
22/06/30 07:16:43.81 1TbRNwlJH.net
>>807
エクセルVBAでDBのデータやファイルデータを読み込むとき
非同期にならないように処理するってことなんでしょうか?
例えばフラグを立ててdo-while、breakで処理待ちしてから次の処理に進むとか?
webのように処理と表示のタイムラグを気にするようなことがないのかもしれませんね
819:デフォルトの名無しさん
22/06/30 07:32:44.20 wDIpT9iQ0.net
それすんごい資源食わないか?
820:デフォルトの名無しさん
22/06/30 07:37:53.64 1TbRNwlJH.net
>>809
vbaはコールバックを使わないということらしいのですが
コールバックを使わずに非同期処理する方法があるのでしょうか?
821:デフォルトの名無しさん
22/06/30 07:47:00.24 NKnrqd7g0.net
ない(もしくはめちゃ面倒だ)から諦めろ
非同期やりたいなら他の言語使え
822:デフォルトの名無しさん
22/06/30 07:59:35.80 wyi1xEzY0.net
VBA走らせている間に漫画でも読んどけよ
823:デフォルトの名無しさん
22/06/30 08:04:39.54 1TbRNwlJH.net
え、昨夜のレスでは非同期使えるって言われたので
多言語と同じようにpromise的な処理があるのかと思いました
非同期めちゃくちゃ面倒ってことは
エクセル処理で非同期を使うという発想が間違っているのですね
なんかいろいろ勘違いしていたみたいでした
神様、先輩方、すみませんでした
824:デフォルトの名無しさん
22/06/30 08:14:56.75 CdZVH0NpM.net
vbsとか使って外部プロセスに追い出すのが簡単だな
で、何を並列処理したいのかな?
825:デフォルトの名無しさん
22/06/30 09:30:19.73 TLf+rFOod.net
JavaScriptの経験があるなら今更VBAなんかに手を出さなくてもOfficeスクリプト使えばいいでしょ
デスクトップでもサポートされたからもうVBAいらないよ
826:デフォルトの名無しさん
22/06/30 10:09:22.67 P7B/AZjs0.net
>>815
え、マジ?
もう企業や教育者向けのじゃなくても開発出来るの?
827:デフォルトの名無しさん
22/06/30 10:36:29.60 3IHNP7gZd.net
ブック1開いてマクロ実行
待ってる間にブック2開いて手作業
ブック2保存して閉じたら、そのタイミングでブック1のマクロが停止
これって仕様?
828:デフォルトの名無しさん (アウアウウー Sad3-sbT5)
22/06/30 11:24:18 l3rHcZB/a.net
排他処理なにそれおいしいの?
ファイル保存したらマクロが止まるのは仕様
829:デフォルトの名無しさん
22/06/30 15:49:46.55 RZ5lqdEjd.net
VBAいじっている間にいつの間にかボタン表面が白くなって
userformの背景色や、userformで使われているボタン表面のも同じ白色に変色
まったく新しくファイルを作っても同じ現象が起きる
オフィスをインストールし直しても同じ
例外的にいつもの正常なボタンの表面色で表示されるケースがある
URLリンク(i.imgur.com)
この現象が起きる前に作ったファイルのコピーを作る。このコピーを開く。
このとき、セキュリティ警告が出てる間はなぜか正常なボタン表面色
コンテンツ~のボタンを押した瞬間にボタンが白くなる
Workbook_Openとかはそもそもない
今のおかしな状態が黒線の左側で、右側がセキュリティ警告が出ている状態
VBEでUserForm自体・ボタン・テキストボックス、これらの背景色BackColorの値は
&H8000000F&
これって正常な値ですよね?
つまり内部的には正常な値なのに表示はいずれも真っ白
windowsやモニタの設定の影響であればセキュリティ警告が出てようが無関係に白色化しているはず
何か原因わかる方いますか?
そもそもVBAが関係しているかどうかも分からないのですが。
ちなみに他のエクセルとは無関係のソフトウェアの色は特に変化はないように思います
830:デフォルトの名無しさん
22/06/30 15:56:36.78 RZ5lqdEjd.net
>>819ですが、文章ちょっとおかしなところがありました
ユーザーフォーム上のボタンも、ワークシートに直接おくボタンも同じように白色になっているということです
そもそもボタンだけじゃなくて&H8000000F&で色が表示されている部分は
どれもおかしくなっているような状態です
831:デフォルトの名無しさん
22/06/30 16:27:38.04 CdZVH0NpM.net
たいして白くない件
832:デフォルトの名無しさん
22/06/30 16:32:48.48 RZ5lqdEjd.net
>>821
真っ白です
→は例外的に正常に表示されるケース
←が現状
URLリンク(i.imgur.com)
833:デフォルトの名無しさん
22/06/30 17:41:14.60 1+oYjPxt0.net
>>810
非同期と並列処理の区別をつけろよ
非同期=コールバックでもないしな
834:デフォルトの名無しさん
22/06/30 17:47:02.54 1+oYjPxt0.net
>>819
テーマが適用されてるだけな気がする
835:デフォルトの名無しさん
22/06/30 18:26:58.93 m1ZMAziu0.net
システムカラーの値
URLリンク(docs.microsoft.com)
836:デフォルトの名無しさん
22/06/30 21:06:49.66 1TbRNwlJH.net
>>823
そうですね
コールバックがマルチスレッドって言ってるわけでも
プロセスを分けるって言ってるわけでもないです
全ての非同期処理は並列処理でもないですし
コールバックは処理なので、非同期でもないですし
VBAは初めてなのでいろいろ勉強していきます
なんか変なこと言っていたらごめんなさい
837:デフォルトの名無しさん (スッップ Sd5f-gXkX)
22/06/30 22:28:19 SUgmTyTCd.net
自分はやりたい事の手段の一つにExcelVBAがあるだけでExcelVBAでどこまでできるかってのは気にしてない
別の言語を選択すれば可能ならExcelVBAにこだわることもないしね
勉強するあたりのレベルならExcelVBAだけでなくほかの言語も勉強したほうがいいかもね
838:デフォルトの名無しさん
22/06/30 23:19:39.52 1TbRNwlJH.net
エクセルの参加人数はすごいと思います
参加人数の多いエクセルをプラットフォームとしてデータ処理できるVBAは
他の言語には見られない参加者人数の価値があります(これを英語で何と言ったか忘れましたが)
ハードもプラットフォームも、潜在的な参加者の数で価値を測るという考え方が正しければ
エクセルVBAは他の言語をはるかに凌ぐ学習価値があると思うのです
他の言語を学習しつつもVBAも使えるというのは
とても素晴らしいことなのだと、VBA初学者としても感じています
先生方、これからもご指導いただける機会がありましたらよろしくです
839:デフォルトの名無しさん
22/07/01 00:44:30.82 iVoRsqHDd.net
>>828
お前は二度と来なくていいよ
840:デフォルトの名無しさん
22/07/01 00:49:35.03 T8FFb7IX0.net
>>828
ちょっと何いってるか分からない
841:デフォルトの名無しさん
22/07/01 01:26:43.65 miA2ycF9M.net
魔界に転生するとしたら、リザレクの次くらいに持っていたいスキルですもんね。
転生するまでに習得したいと思います。
842:デフォルトの名無しさん
22/07/01 01:41:24.35 wxGP1WcO0.net
シート上に実行ボタンがあり、いろいろなBookから値を取得してメインのブックに張り付けるマクロがあるのですが、
Windows7+Excel2010とWindows10+Excel2016では、2016方が数倍動作が遅いです(数秒程度が10秒程度になる)。
ただし、時々2010と同程度で終わることがあり、原因がよくわかりません。
なんか、実行ボタンの押し方によって(クリックしてマウスポインタをすぐExcelのウィンドウ外に移動)、
速度が速くなるような気がしているのですが、そのようなことはあるのでしょうか?
あるとすれば、なにか対策や原因はあるのでしょうか?
843:デフォルトの名無しさん
22/07/01 02:14:42.23 u7q4KnhWd.net
>>832
2013あたりからExcelの内部構造が大幅に変わったらしい
Windowsも新しいほど重くなってる
マウスポインタの位置によって速度が変わるのは多いにあり得る
昔はボタンを押したままにするとアプリの動作が止まってたのが、いつのまにかずっと動き続けるようになったし
844:デフォルトの名無しさん
22/07/01 06:59:23.11 JTFoUJU2H.net
>>829
DBシステムとしては
操作のバリエーション、検索、演算エンジンともに
最高峰の素晴らしい言語システムなのに
初心者に冷たいコミュニティなのですね
>>830
ネットワーク経済性と似た発想の価値測定方法で
ソフトやハードの経済価値を推定する思考方法です
845:デフォルトの名無しさん
22/07/01 07:51:36.56 m7rasyZv0.net
>>834
いやいや、DBシステムとして使うとすると
シートにSQL投げようとしたとき
インデックス貼れない時点で欠陥品だよ。
EXCELの本分はあくまで表計算。
846:デフォルトの名無しさん
22/07/01 08:45:57.76 Dqsnfi220.net
>>834
まずDBシステムじゃないし
COMから学んではどうか
847:デフォルトの名無しさん (ブーイモ MM4f-2lfq)
22/07/01 09:01:55 2BH0SskNM.net
今どき簡易DBアプリはPowerAppsみたいなローコードツールを使えばよい
オンライン共有のAccessみたいなアプリがクソ簡単に作れてExcelやスプレッドシートとの連携も容易
848:デフォルトの名無しさん
22/07/01 11:26:48.78 MWfPFNZsa.net
>>832
気のせいだからほっとけ
849:デフォルトの名無しさん
22/07/01 11:27:33.06 B1H2Mtvqd.net
自分としては質問があればそれにこたえるだけでいいと思うが
技術者が他の事にも手を広げるならクソ簡単かもしれないが
一般ユーザーが背伸びしてVBAを理解しようとしてるなら保守なんかも含めてハードル高いと思うんだよね
まあ言いたい人は好き勝手に言うだけだから止められないが
850:デフォルトの名無しさん
22/07/01 11:46:09.70 Kpd5ohp2M.net
自分としては質問があれば質問するだけでいいと思うが
一般ユーザーが背伸びして回答なんかハードル高いと思うんだよね
まあ言いたい人は好き勝手に言うだけだから止められないが
851:デフォルトの名無しさん
22/07/01 15:15:30.41 Bx5b0a9x0.net
大事な事だから二度と言うな
852:デフォルトの名無しさん
22/07/01 15:46:06.01 Ry4wIvAM0.net
どっちだよw
853:デフォルトの名無しさん
22/07/01 15:50:37.55 E3WEdYada.net
背伸び?逆やろ
背伸びしようとするタイプはVBAなんて使わない
伸びない香具師がVBAに固執してる
854:デフォルトの名無しさん
22/07/01 15:51:42.30 S5EpTQdXM.net
昔
「いいですか?1回しか言いませんからよく聞いてくださいね」
って言われたけど、なんで大事なことなのに1回しか言わないんだろう
そんなに大事なら確実に伝わるまで何回でも言うか書いて渡すかすべきだろ
855:デフォルトの名無しさん
22/07/01 15:56:44.16 wWku/Klda.net
俺、一回しか教えねーぞ!
やるから見て覚えろ盗んで覚えろな!
これ、昭和の意地悪い上司。
それが当たり前だった時代
856:デフォルトの名無しさん
22/07/01 15:57:57.34 Ry4wIvAM0.net
>>844
そうそう
アホちゃうの
857:デフォルトの名無しさん
22/07/01 15:59:37.00 wWku/Klda.net
>>843
めっちゃ分かる
何がなんでもマクロでやっているヤツって何なんだろうね
858:デフォルトの名無しさん
22/07/01 17:12:32.89 B9UYAOsl0.net
>>844 みたいな考えの奴はたいていちゃんと聞いてないしメモ渡しても無くしたりするしw
859:デフォルトの名無しさん
22/07/01 17:35:59.70 Ry4wIvAM0.net
>>848
メモ渡すってアホなん
860:デフォルトの名無しさん
22/07/01 17:57:54.04 Dqsnfi220.net
>>848
そういう奴でも同じ事何回か教えりゃ覚えるから、
分かんなかったらいくらでもまた聞けって言ってる
目的は教育コストの削減とかそいつの成長とかじゃなく仕事の完了な訳だから
861:デフォルトの名無しさん
22/07/01 18:43:10.74 miA2ycF9M.net
いやこれ、あわしろっていう新手の荒らしですよ。
862:デフォルトの名無しさん
22/07/01 19:33:27.88 rTaPWcb90.net
昭和からEXCEL使ってた人いる?
863:デフォルトの名無しさん
22/07/01 19:34:18.95 B9UYAOsl0.net
>>850
その場限りの相手ならそれが正解だけど>>849 みたいなポンコツは成長しないから今後とも仕事させるならとっとと切り捨てないと結局仕事の完了が遅れるだけ
864:デフォルトの名無しさん
22/07/01 19:41:46.04 m7rasyZv0.net
>>852
そもそも昭和の時代にEXCELあったっけ?
あの頃ってロータス123とか
マルチプランの時代じゃないの?
865:デフォルトの名無しさん
22/07/01 19:42:01.43 Gg+5fIBkM.net
>>853
そういうことを言い出したら極論VBA使いもクビにして優秀なエンジニア雇えという結論にしかならん
雇用維持も企業の責任
866:デフォルトの名無しさん
22/07/01 19:52:08.13 lB7C8CJv0.net
>>833
複数のブックを別ウインドウで開くようになったからな
個人的にはユーザーフォームが最前面に来ないのがめんどい
867:デフォルトの名無しさん
22/07/01 19:52:42.66 lB7C8CJv0.net
あと最小化するとユーザーフォームも消えるのが嫌だな
868:デフォルトの名無しさん
22/07/01 20:32:48.53 B9UYAOsl0.net
>>854
最初の日本語版は1989年(平成元年)リリースだから日本語版を使ってた人は居ないはず
最初のExcelはMac用に1985年(昭和60年)にリリースされてるみたいだからもしかしたら触った人がいるかもしれない
869:デフォルトの名無しさん
22/07/01 20:38:52.77 B9UYAOsl0.net
>>855
別に辞めさせなくてもポンコツはポンコツで務まるような職場に移せば良いだけだろ
870:デフォルトの名無しさん
22/07/01 21:05:26.47 0+5KhUlf0.net
vbエディターを開いたときに開いているブックのモジュールやらUFやらがバーっと開くのを止めさせたいんですが、どなたかご存じないですか?毎回重ねて並べて閉じるのがめんどい。
871:デフォルトの名無しさん
22/07/01 21:10:05.40 CjhzObSj0.net
ラジオボタンがクリック1回で反応しなくて2回マウスでカチカチって指定しないといけないんだけど、直し方わかる人いますか?(´・ω・`)PCの問題なんかな?
872:デフォルトの名無しさん
22/07/01 21:42:37.97 kFE+Jjo70.net
マルチプランならあるな。
と言っても平成のはじめだけど。
あの時代はPC買うとおまけで違法コピーモノがもらえる時代だからな、
マルチプランも123も両方あったわ。
当時は123のほうが強かったんだよね。
Excelとマルチプランて名前が変わっただけじゃないの?
873:デフォルトの名無しさん
22/07/02 00:17:07.82 7TC/SMOx0.net
Excel3.0から使っていたら人ならいたよ。
とっくに定年退職されてます。
最近のExcelはごちゃごちゃしていて苦手と言っていたかな。
874:デフォルトの名無しさん
22/07/02 00:35:50.92 eLIQ72LUM.net
Collectionについての質問なのですが
Collectionの要素をソートする場合
それ用のSubを作って、その中でソート後のCollection変数を作ってその中に順番に要素を1つ1つ入れていって最後に
set 元のcollection=新collection
とやる方法を考えつきました。
この方法で問題ないですか?それとももっとスマートな方法がありますか?
875:デフォルトの名無しさん
22/07/02 00:50:08.19 vnn63W/20.net
懐かしいの。
当時 IBM 5550とかいうパソコン使ってた記憶がうっすらある
そこでマルチプラン動かしてた
ところが海外拠点ではロータス123 の方が評判でどこかでそれに切り替えた記憶がある。同時に IBM 55505何かに変更したような記憶があるな
マック使ってたやつが Excel を自慢して確かに羨ましかったな
DOS V パソコンで Windows 3.1が動いてその上で Excel が動いた時は感激したな
876:デフォルトの名無しさん
22/07/02 01:12:48.41 yZ67dQaR0.net
昭和ならロータス123とアシストカルク使ってたな
あれはDOSだったかな?
877:デフォルトの名無しさん
22/07/02 01:21:18.54 yZ67dQaR0.net
DOSの頃はファイラーはFD、ネットはエアクラフト、お絵描きはkid98、音楽はMIMPIがデファクトスタンダードだった
878:デフォルトの名無しさん
22/07/02 01:36:45.55 7TC/SMOx0.net
昔は企業で使うPCソフトといえば表計算と文書ソフトぐらいだったもんね。
879:デフォルトの名無しさん
22/07/02 06:04:41.51 kG8DYDgz0.net
>>864
良いんじゃない?それで。
用途にもよるけどコレクションにキーくっつけといて
別にキー一覧みたいのをソートして作っといて
そのキーからソートした順番に引っ張るっていう方法もあるけど。
880:デフォルトの名無しさん
22/07/02 06:14:46.63 v1xY47GsM.net
>>869
あれれそうですか。
キーの方法も良さそうですね。
でもこんなひとはよく使用しそうなのに話が盛り上がらないのは
みんなのVBAのスキルが低レベルだからでしょうか?
881:デフォルトの名無しさん
22/07/02 06:15:13.26 v1xY47GsM.net
x こんなひと
o こんなこと
882:デフォルトの名無しさん
22/07/02 06:29:09.78 BdV6t7uW0.net
すげーな、普通の人が寝る夜中に盛り上がらないからって他人を低レベル呼ばわり
883:デフォルトの名無しさん
22/07/02 06:35:31.84 yZ67dQaR0.net
>>870
かまってもらえないからみんなまとめて低レベル扱いですかそうですか
くさっ
884:デフォルトの名無しさん
22/07/02 06:52:10.92 kG8DYDgz0.net
>>870
なるほど、ただの煽りかも知れないけど
あまり人前でそう言うことは言わない方がいい。
人を嫌な気分にさせるし
自惚れ屋と思われて周りからも疎まれることになる。
自分の為にも思ったことは口にしたり書き込んだりする前に一度考えてから実行する方が良いよ。
885:デフォルトの名無しさん
22/07/02 07:31:29.49 LyZZMtStD.net
>>870
当たり前の処理のどこに盛り上がる要素があると思うのか
そもそもソートが必要なものにcollection(リスト)使おうって時点で
データ構造の選択を間違ってる可能性が大きい
886:デフォルトの名無しさん
22/07/02 07:35:58.08 +UfCFyJWM.net
わかった
じゃあいい
887:デフォルトの名無しさん
22/07/02 07:38:04.43 Vi0lNJ4o0.net
釣られすぎ
888:デフォルトの名無しさん
22/07/02 07:40:07.80 +UfCFyJWM.net
For-Next文の中だけで使う局所ローカル変数を定義する場合は
そのFor-Nextブロック内で
Dim a as String
でいいんですっけ?
それともモジュールの先頭で?
たしかVBAでは局所ローカル変数の概念がなくて
Sub/Function内すべての場所で使える気がするのだけど。
889:デフォルトの名無しさん
22/07/02 07:49:38.67 kG8DYDgz0.net
>>878
局所ローカルという呼び方をするのかは兎も角
関数やメソッド以下のスコープ変数は基本的には設定出来ない。
変数宣言をする場所についてはVBAに限らず
そのスコープが始まる頭のところに書くのが一般的だよね。
ただ、言ってる通り別に先頭に書かなくても問題なく実装は出来る。
890:デフォルトの名無しさん
22/07/02 07:49:48.13 vz70zrJPM.net
>>870
盛り上がったじゃないか
良かったな
891:デフォルトの名無しさん
22/07/02 07:49:50.15 LyZZMtStD.net
>>878
言うとおり局所ローカル変数は存在しないのでFunctionやSubの中ならどこでもいいよ
モジュール先頭(Function、Subの外側)だとグローバル変数かパブリック変数になるからその目的ならダメ
892:デフォルトの名無しさん
22/07/02 07:58:43.11 +UfCFyJWM.net
>>879
>>881
なるほどありがとうございます。
やっぱりできないのですね。
でもSub/Function先頭に書くと可読性が著しく下がる(この意味が分からない人はスキル低すぎ)のでやめときます。
われわれのように複雑なプログラミングをしてる人にとってはVBAの言語はいろいろ不便に感じますね。
893:デフォルトの名無しさん
22/07/02 08:01:20.13 kG8DYDgz0.net
>>882
だからそう言った言い方はやめた方がよいかと。
モロに自分が「単一責任原則も知らずにスパゲッティコード組みます」と言ってるようなものだから。
894:デフォルトの名無しさん
22/07/02 08:27:22.57 bQuvSXdqD.net
>>882
COBOL書いたら死んでしまいそうな人
895:デフォルトの名無しさん
22/07/02 09:00:40.59 At3W7bIA0.net
>>878
まあ好みだけど俺は変数宣言は可能な限り使う直前って決めてるからそのケースならループ内で宣言する
896:デフォルトの名無しさん (ワッチョイ 0a63-63P4)
22/07/02 09:30:40 6d3aqhyk0.net
チゲ鍋みたいだな局所ローカル
897:デフォルトの名無しさん
22/07/02 09:41:11.94 qJpeB53K0.net
DSのプチコンでローカル変数のありがたさを思い出したな
898:デフォルトの名無しさん
22/07/02 09:55:37.37 COZLaCzbF.net
局部もろ観え
899:デフォルトの名無しさん (ワッチョイ 87da-3xOz)
22/07/02 12:13:59 vnn63W/20.net
>>885
何回も変数宣言を実行することになるのかな。そうなら理論的にはメモリの無駄と速度の低下が発生するんじゃないの
900:デフォルトの名無しさん
22/07/02 13:17:36.46 Y5ZkAX2p0.net
ReDimの存在
901:デフォルトの名無しさん (ワッチョイ 8a01-BQ8I)
22/07/02 13:53:14 At3W7bIA0.net
>>889
宣言文と実行文の違いを学ぼうか
>>890
ReDim は実行文だよ
902:デフォルトの名無しさん
22/07/02 14:54:16.39 7TC/SMOx0.net
久々に熱いスレになったね
903:デフォルトの名無しさん
22/07/02 16:46:05.89 vnn63W/20.net
>>891
普通の文と同じように実行されるわけはないと思ったんで疑問形で書いたんだけど
でもどういう法則があるのかよくわからんから質問したの
宣言文と実行文で検索しても参考になる記事はなかった
教えてくれませんか?
904:デフォルトの名無しさん
22/07/02 17:08:32.73 At3W7bIA0.net
>>893
VBA 宣言 ループ とかでググればいいかと
URLリンク(thom.hateblo.jp)
一部の例外はあるけど基本的に宣言文は最初にまとめて処理される
なのでサブルーチンに入った時点で変数は作成されるからメモリーの無駄とか速度低下はないよ
905:デフォルトの名無しさん (ワッチョイ 87da-3xOz)
22/07/02 18:56:13 vnn63W/20.net
>>894
おおー、なるほど。
よくわかった、ありがとさん。
906:デフォルトの名無しさん
22/07/03 12:22:53.01 Jv7ZJhwXr.net
>>882
なんでわざわざ煽る言い方するわけ?
マシで理解できないわ
907:デフォルトの名無しさん
22/07/03 12:39:04.19 v1f+WlYn0.net
スレ立ち上げ当初みたいに、こうやって真面目な議論してれば良スレなんだよな。
あんたらハメ外せばすぐ毛の話。。。
908:デフォルトの名無しさん
22/07/03 13:05:07.71 Fpu/jUUc0.net
質問者の質も落ちた
909:デフォルトの名無しさん
22/07/03 16:27:46.74 v1f+WlYn0.net
初期の頃、Excel板かここかは忘れたけど、質問も即答してくださる凄い回答者が何人かいた覚えがある。
今はいなくなったよね。
質問側も意味不明な質問ばかり。
910:デフォルトの名無しさん
22/07/03 17:15:16.28 ur8aI9T40.net
そういえば昔って質問にもテンプレなかったっけ
911:デフォルトの名無しさん
22/07/03 18:58:18.36 95K4DRnu0.net
てか議論するスレでもないけどな
912:デフォルトの名無しさん
22/07/03 21:36:18.00 v1f+WlYn0.net
思い出した。昔はいくつかのVBAスレがあった
913:デフォルトの名無しさん
22/07/03 21:53:26.02 +uLGaU5J0.net
【VBA エキスパート】 Excel / Access スレリンク(lic板)
素人にVBA仕込んだ URLリンク(medaka.5ch.net)
914:est/read.cgi/prog/1642131517/ VBAのフリーランスエンジニアは需要ありますか? https://medaka.5ch.net/test/read.cgi/prog/1598637098/ Excel VBA 質問スレ Part76 https://mevius.5ch.net/test/read.cgi/tech/1651339421/ VBAなんでも質問スレ Part3 https://mevius.5ch.net/test/read.cgi/tech/1631184381/ Access VBA 質問スレ Part2 https://mevius.5ch.net/test/read.cgi/tech/1544620479/ ★今VBAを勉強してるんだが★ https://medaka.5ch.net/test/read.cgi/php/1214626617/
915:デフォルトの名無しさん (オッペケ Sr23-BXQt)
22/07/04 12:09:05 0Cy5iXrvr.net
回答者はすぐマウントとってくるしな
>>882みたいな質問者なのにマウント取ってくる意味わからんやつもいるし
能力低すぎとか、われわれのような複雑な~って頭おかしすぎるだろ
916:デフォルトの名無しさん
22/07/04 13:01:53.71 OO2ZWbG3d.net
>>904
それ、しつこくForがどうのと聞いていた例のあいつだから
917:デフォルトの名無しさん
22/07/04 16:21:37.95 vF9E34H30.net
>われわれのように
うん。われわれって誰?
脳内でしょ恐らく
ふつーよ、自分から複雑な事やっていますアピールとかするかぁ??
もしかして釣られているのか俺ら
918:デフォルトの名無しさん
22/07/04 16:28:28.96 g5E8ZW1ad.net
決まった様式のExcelファイルがあって、それを見やすく加工するマクロを組んで自信で使ってた際に、それを部内に展開したいってなった場合どう配布するのが正解なんだろう。
使う人はマクロの知識は全くないものとして。
1.xlamにして配布
アドインの設定をしてあげる必要がある。
使用頻度の低い人にアドインを入れるメリットが薄い。
2.マクロだけ入れたxlsmを配布
加工したいxlsxファイルと同時に開いてもらってマクロを実行してもらう。
手間が増える。
3.VBSに書き換えて配布
書き換えが面倒。
4.VBSとxlsmを配布してVBS実行でxlsm起動とマクロ実行
処理に時間がかかりそう。
使用頻度の高くないマクロをアドインとして登録するのは起動時間のロスになりそうだから避けたいんだけど、他の人に特定のマクロを手軽に実行させるのはどういう方法がいいだろうか?
919:デフォルトの名無しさん
22/07/04 17:17:05.04 CvyJwule0.net
>>907
> 2.マクロだけ入れたxlsmを配布
> 加工したいxlsxファイルと同時に開いてもらってマクロを実行してもらう。
> 手間が増える。
これでいい。手間って配布の手間のこと?
共有サーバーのどっか特定の場所に読み取り専用にしたxlsmファイル置いといて
ここのマクロファイル使って作業してくれって告知だけすればいい
不具合が見つかって修正した場合も同名ファイルで上書きするだけだから楽だと思うよ
920:デフォルトの名無しさん
22/07/04 17:57:33.89 oo1ug/2UD.net
俺は上書き保存が怖いので.xltmを渡してる
921:デフォルトの名無しさん
22/07/04 18:50:46.28 tF6z07pca.net
>>909
リードオンリーで開くにしとけばいいだけじゃね?
922:デフォルトの名無しさん
22/07/04 19:05:52.33 g5E8ZW1ad.net
>>908
Excelファイル2つ開いてマクロ実行して閉じるっていうのが操作的に手間かなと思ったけど、共有フォルダに置いといてそれを開いて使ってもらうのは無難に使いやすそう。ありがとう。
後出しで申し訳ないんだけど、うちの会社のPCがウイルス対策だとかで毎日起動時にマクロ有効化設定を強制オフ(有効化メッセージ出ずにオフになるやつ)にされるせいで、トラストセンターから毎日有効化設定してね、っていう雑な仕組みになってるんだ。
自身は設定オンにするVBSなりbatで対応してるけど、他の人だとExcel開いてトラストセンターで設定変更の事前動作も必要に。
アドインやVBSなら有効化しなくても動作するんだけど、そうなるとドラッグドロップで動作するVBSだと使う側の手間は省けるだろうか。
923:デフォルトの名無しさん
22/07/04 19:58:33.04 Ujf5qvvVd.net
1. xlsmを共有フォルダに保存
2. 読み取り専用で開く
3. xlsm上の別シートに出力結果をVBAで作成
4. 出力結果シートを新規ブックにVBAで移動 (ws.move)
5. 新規ブックをダイアログボックスで保存させる
毎回これでやってる
924:デフォルトの名無しさん
22/07/04 22:40:20.14 CvyJwule0.net
>>911
この環境下でも
(セキュリティを無効化して対象のxlsmを開く)VBSなりbatファイルの実体を共有に置いて
そのショートカットだけを配布がベストだと思う
> ドラッグドロップで動作するVBSだと使う側の手間は省けるだろうか
組織内のユーザーのリテラシーにもよるけど、
xlsmでもWorkbook_Openで即ファイルピックアップダイアログ開かせれば大差ないし、
なにより保守がしんどいでしょ
もし複雑な加工内容への変更依頼がきたら?
あるいは今後別のマクロの作成依頼が来て、それもすべてVBSで配布しろと言われるかもしれない
VBEもIDEとしてはアレだけど、
ブレークポイント置けないDebug系メソッドないモジュール分割気軽にできないVBSで開発し続けるの何倍も大変だと思うよ
925:デフォルトの名無しさん
22/07/05 01:05:42.67 jbzqjuV/a.net
>>912
> 3. xlsm上の別シートに出力結果をVBAで作成
> 4. 出力結果シートを新規ブックにVBAで移動 (ws.move)
新規ブック作ってそこのシートに直接結果を出力した方が楽じゃね?
926:デフォルトの名無しさん
22/07/05 07:41:15.60 HXH2KDmV0.net
>>907
VBSを配布して、そこに処理対象ファイルをドラッグドロップしてもらうのが、ユーザ側としては1操作で完結して使いやすいと思う
ユーザに慣れない操作を押し付けて手間を増やしたら本末転倒だしね
ところで「加工」て何するの?
大部分が編集不可の共有ひな型ブックならともかく、人間が好き勝手にいじったブック中から「加工」対象を特定するのは大変だろ
927:デフォルトの名無しさん
22/07/05 08:39:26.47 ZlAE1xYZd.net
別にVBSにこだわる必要は無い
Powershell でも良いでしょ
928:デフォルトの名無しさん
22/07/05 09:04:16.75 MtIzSAoXd.net
>>915
加工についても恥ずかしながら前スレで相談させてもらって一応解決することができました。
・web上からDL出来る名簿がpdf
・pdfをacrobatでexcel変換するとセル位置や結合が不揃い
・目的は名簿データをそれぞれ横一列のデータにしたい
vbaにて処理は出来るようになったけど、他の人が使いたいという意見があり、今回配布手段についてご相談させてもらった次第です。
URLリンク(i.imgur.com)
URLリンク(i.imgur.com)
929:デフォルトの名無しさん
22/07/05 09:33:47.87 gxzY68gk0.net
・WebからDLするドキュメントをCSVにでもしてもらえるよう社内調整する
が一番ラクで確か
930:デフォルトの名無しさん
22/07/05 11:30:39.29 X6XwWL+o0.net
最近、Alt+F11でVBEを開くと、アドインのコードが表示されるようになったんだけど、
仕様が変わったのか、表示されるような設定にしてしまったのか。。
皆さんは表示されますか?
931:デフォルトの名無しさん
22/07/05 11:43:19.49 QxOevurCa.net
上の人間の指示通りにするので悩まない
932:デフォルトの名無しさん
22/07/05 11:57:42.97 Fkl5GJtU0.net
>>919
されますよ。
933:デフォルトの名無しさん
22/07/05 12:00:27.76 X6XwWL+o0.net
>>921
毎回アドインのコードが表示されているウィンドウを閉じていますか?
それとも、どこかの設定を変更すると表示されなくなりますか?
934:デフォルトの名無しさん
22/07/05 12:47:27.21 HXH2KDmV0.net
>>917
成程。流れ見てないけど、ここにマトモに助けてくれる人がいるというのは意外(失礼w)
acrobatによるpdfのexcel変換過程で色んな気まぐれ要素によりフォーマットが乱れそうな予感がするが、それを吸収するコーディング努力の継続こそスキル上達の早道
頑張って下さい
935:デフォルトの名無しさん (ワッチョイ 73da-XUZM)
22/07/05 19:57:34 Fkl5GJtU0.net
>>922
スマン、何かの設定いじったら直った記憶
覚えてなくてすまん
936:デフォルトの名無しさん (ワッチョイ deda-auNL)
22/07/06 18:47:05 8WsZe39w0.net
ちんぽじ
937:デフォルトの名無しさん (ワッチョイ 73da-XUZM)
22/07/06 19:59:54 D5LMB4PC0.net
2023でるかもね
938:デフォルトの名無しさん
22/07/06 21:31:49.12 RzEtlOC+0.net
VBAxSeleniumでchromeはオプション設定が出来るけどedgeは出来ないと思ってたんだが、出来るんだな。
ネットでもうまくいかないていう情報が多い。
Chromeの場合
Driver.AddArgument ("user-data-dir=" & fso.BuildPath(CurrentDirectory, "chrome_vba"))
Edgeの場合
driver.SetCapability "ms:edgeOptions", "{""args"": [""user-data-dir=" & Replace(fso.BuildPath(CurrentDirectory, "edge_vba"), "\", "\\") & """" & _
"] }"
まあjsonで渡してるんだが、VBAてjsonてこんな風にデータベタ打ちしか方法がない?
939:デフォルトの名無しさん
22/07/08 15:51:01.23 vIJsrl8u0.net
ダウンロードしたVBAマクロ入りファイル、デフォルト無効化が取り消し。MicrosoftがOfficeの仕様を再度変更
URLリンク(pc.watch.impress.co.jp)
940:デフォルトの名無しさん
22/07/10 15:06:01.33 TbXhrDsy0.net
えぇ((( ;゚Д゚)))恐い
941:デフォルトの名無しさん
22/07/10 16:22:28.20 Rxyi1Cuq0.net
ダウンロードして使うことがないからどっちてもええよ
942:デフォルトの名無しさん
22/07/11 01:16:29.22 TTL+d6j7a.net
コロコロ変わるのは昔から
また変更あるぞ
943:デフォルトの名無しさん
22/07/11 01:40:13.99 vt1vW9IA0.net
インターネット経由がどうたらというのは、古いマイクロソフトと新しいマイクロソフトの内部抗争にすぎない。
944:デフォルトの名無しさん
22/07/11 04:21:24.13 /TJLjZUe0.net
ああゆう最先端の企業でも老害が威張り散らしているのかな
945:デフォルトの名無しさん
22/07/11 04:31:29.20 vt1vW9IA0.net
ビルゲイツ派はAzue妨害派だろうな
946:デフォルトの名無しさん
22/07/11 09:41:27.04 67sTwPgvM.net
大口の客がゴネたんだろう
VBAがいつまでも使えるのもそういう方々のお陰なのだからVBAer達は感謝しないと
947:デフォルトの名無しさん
22/07/11 18:14:40.24 /TJLjZUe0.net
分かったよ
948:デフォルトの名無しさん
22/07/13 15:11:11.33 cdOR/i1g0.net
客先から毎日送られてくるpdfに対し、特定の部分だけを抜いてexcelに出すというものを作りたいです
流れとしてはwordで開いてコピペ→そこから必要な部分だけ整形
という流れで考えており概ねできたのですが、pdfをwordに落とした時に文章がそのまま文章でコピーされる時と1行ずつテキストボックスやら画像やらでコピーされる時がありうまく実用化出来ません
上記か、あるいはその他の方法でも良いので安定的にコピーする方法は無いでしょうか?
ちなみにpdfは定型フォーマットに記載された日報のような形式で、手動なら文字はそのままコピペできます、フォーマットはいつも同じですが中の文章は行数が日により異なります
949:デフォルトの名無しさん
22/07/13 17:04:46.28 +TgcJMJe0.net
>>937
客先にテキストでもくれと依頼すればいいだろ
950:デフォルトの名無しさん
22/07/13 17:32:17.47 H0DndFW/a.net
pdfを書き換えたい訳じゃなくて中身を読みたいだけなら
pdfreaderを使うのが一番楽
951:デフォルトの名無しさん
22/07/13 18:07:17.76 jvbf7mTW0.net
PDFは人間のため、印刷のために開発された仕組み
データの順番がどんだけ変わっても人間の目には同じに見えるようになってるから、中身をプログラムで自動的に取り出すのには向いてない
厳密には不可能じゃないとしても、ものすごく大変
できるだけ別の方法を考えた方がいい
952:デフォルトの名無しさん
22/07/13 18:39:04.67 tqig4XWpd.net
そのPDFが紙からスキャンしたものじゃなく文字データとして残ってるなら、ワード経由しなくてもacrobatreaderで開いてコピペするのが早いとは思う。
PDFをExcelに変換する手段があるなら、変換してマクロで必要な所を抽出できそうだけど元ファイル次第では難しいか?
953:デフォルトの名無しさん
22/07/13 19:16:11.37 RAwbutPOM.net
GOOGLEドライブに入れてドキュメントで開けばOCR使えるからそれを試してみては
954:デフォルトの名無しさん
22/07/13 19:23:52.41 F58RRgFgM.net
pdfってhtmlのようなテキストだったりする、意外と知られていない?
955:デフォルトの名無しさん
22/07/13 19:30:34.74 XpRrYrAX0.net
>>937
パワークエリ
956:デフォルトの名無しさん (ワッチョイ fdce-TkQT)
22/07/13 19:51:06 jvbf7mTW0.net
>>943
中身はテキストなんだけど、データの順番が入れ替わっても同じ見た目の文書が再現できる
だから人間から見て正しい順序で取り出すのが大変
いっぺん出力してOCRした方が早いぐらい
957:デフォルトの名無しさん
22/07/13 20:29:31.07 RAwbutPOM.net
>>943
ここの連中にはよく知られている
pdfの解析はめちゃくちゃキツイ
958:デフォルトの名無しさん
22/07/13 20:29:35.01 +TgcJMJe0.net
>>943
馬鹿なら黙っていればいいのに
htmlじゃねーよ
959:デフォルトの名無しさん
22/07/13 20:34:43.23 RAwbutPOM.net
>>947
「のような」って書いてる
マークアップされてるって事ぐらい分かるでしょ
960:デフォルトの名無しさん
22/07/13 20:40:59.71 +TgcJMJe0.net
>>948
マークアップじゃないし
馬鹿は黙っていればいいのに
961:デフォルトの名無しさん
22/07/13 20:55:32.87 RAwbutPOM.net
馬鹿じゃねーよ
テキトーに言ってるだけだ
962:デフォルトの名無しさん
22/07/13 21:36:26.72 bpgpUpce0.net
バイナリファイルをマークアップされてるって表現する人はじめてみた
963:デフォルトの名無しさん
22/07/13 22:51:54.33 bvCBiwjA0.net
とはいっても取引先からのデータは大半がpdfだからなぁ
964:デフォルトの名無しさん
22/07/13 23:54:44.21 vJ6Ng0OKd.net
そんなもん会社によるだろ
言えばExcelやCSVで送ってくれるとこも普通にある
965:デフォルトの名無しさん
22/07/14 00:12:44.49 X42JNt2t0.net
マーキングするために会社の上司が部下の女に触りまくってるじゃん
966:デフォルトの名無しさん
22/07/14 07:26:28.96 5ehEa+FTd.net
技術力だけで生きていくか、コミュ力も高めて生きていくかの「差」が今回の質問で明らかになったね
今回の場合、コミュ力あるやつならとっくに客先はpdfとは別にcsvとかテキストファイルを送る方向で動いてるよ
俺はコミュ力を高めていく
お前らは今後も無理難題をひたすら解決する技術力を高めていけw
967:デフォルトの名無しさん
22/07/14 08:00:06.43 E22ufzJOM.net
今回のデータをcsvで頂戴したく存じます
コミュも何も一行メール送るだけでいいだろう
むしろこれ出来ないなら何もできんだろ
968:デフォルトの名無しさん
22/07/14 08:06:18.41 KsBnasMha.net
社内規定で社外に送信するデータはPDFとなっておりますので、ご期待に沿えず申し訳ありません。
969:デフォルトの名無しさん
22/07/14 08:12:38.64 1tikFi/NH.net
そういうコミュニケーションとれない奴は、
仕様を決めるときにもコミュニケーションとれないから思い込みで作るまである
970:デフォルトの名無しさん
22/07/14 08:14:11.08 YsqOWTP3d.net
根本解決を目指すアドバイスはいいけど、どんなデータかも質問者と客先の状況も分からないのに、データ貰えば解決(ドャァは乱暴じゃない?
少なくともwordで開いても文字認識がまばらだったりするって時点で、綺麗な様式から出力したデータじゃないのは確かだし、質問者がそういう回答を求めてないとは思わない?
971:デフォルトの名無しさん
22/07/14 08:21:48.07 E22ufzJOM.net
>>959
OCRか元データもらう以外の解決策があるなら、かなり聴きたい
972:デフォルトの名無しさん
22/07/14 08:24:09.60 lnbsEUJQM.net
OCRのがマシって回答出てるだろ
現実から目をそらすな
973:デフォルトの名無しさん
22/07/14 08:49:50.07 vNge93QI0.net
最初に「CSVなどで依頼しても無理でした」とか書いてくれれば無駄な争いは避けたのかもな
974:デフォルトの名無しさん
22/07/14 10:19:52.64 dxotV0yqa.net
>>947
++
>>949
++
>>951
ほんそれ
975:デフォルトの名無しさん
22/07/14 21:34:12.70 L5ignm6zd.net
A列のセルに列挙された複数単語の商品名から重複した単語のみを除くことは可能でしょうか?
A
1 RED BLUE APPLE
2 RED BLUE BANANA
3 RED BLUE GREEN ORANGE
4 RED BLUE YELLOW WHITE GRAPE
5 RED BLUE WHITE CHERRY
↑これらのデータを↓のように整形したいです。
B
1 APPLE
2 BANANA
3 GREEN ORANGE
4 YELLOW GRAPE
5 CHERRY
「RED BLUE APPLE」は同一セル内にスペースで区切られて入力されています。
データ量は1回あたり100行程度になります。セル内の単語、単語の数は毎回異なります。
ご教示いただけますと幸いです。よろしくお願いいたします。
976:デフォルトの名無しさん
22/07/14 21:34:41.90 TfuP8Uyl0.net
6進数?を通常の時刻表記に直す方法教えてください。
例)1.3→1:30
2.45→2:45
977:デフォルトの名無しさん
22/07/14 21:37:17.58 TLlcUFbPa.net
>>965
A1に時間が入っているとして
=TIME(INT(A1),A1-INT(A1),0)
978:デフォルトの名無しさん
22/07/14 21:41:07.21 0fmyum11H.net
>>955
コミュ力の定義はなんですか?典型的なインデックスは何ですか?
979:デフォルトの名無しさん
22/07/14 21:44:41.57 zzetjp0td.net
>>964
可能です。
はい、次。
980:964
22/07/14 22:56:36.99 X42JNt2t0.net
>>968
ご回答いただきまして誠にありがとうございます。
981:デフォルトの名無しさん
22/07/14 23:23:30.65 BkEIWbQgd.net
>>964
自分ならだけどこんな感じかと Mainのループは最大行数を取得してくれ _をスペースに置き換えてくれ
Sub_Main()
____Dim_i_As_Long
____For_i_=_1
982:_To_5 ________Dim_a_As_String ________a_=_Cells(i,_1).Value ________Dim_j_As_Long ________For_j_=_1_To_5 ____________If_i_<>_j_Then ________________a_=_CutWord(a,_Cells(j,_1).Value) ____________End_If ________Next ________Cells(i,_2).Value_=_a ____Next End_Sub
983:デフォルトの名無しさん
22/07/14 23:23:50.53 BkEIWbQgd.net
Function_CutWord(a_As_String,_b_As_String)_As_String
____Dim_aa()_As_String
____aa_=_Split(a,_"_")
____Dim_bb()_As_String
____bb_=_Split(b,_"_")
____Dim_c_As_String
____c_=_""
____Dim_i_As_Long
____For_i_=_LBound(aa)_To_UBound(aa)
________Dim_j_As_Long
________For_j_=_LBound(bb)_To_UBound(bb)
____________If_aa(i)_=_bb(j)_Then
________________Exit_For
____________End_If
________Next
________If_j_>_UBound(bb)_Then
____________If_c_<>_""_Then
________________c_=_c_&_"_"
____________End_If
____________c_=_c_&_aa(i)
________End_If
____Next
____CutWord_=_c
End_Function
984:デフォルトの名無しさん
22/07/14 23:43:51.22 qWN4wD1T0.net
スレリンク(bsoft板:7番)
に似てる
985:デフォルトの名無しさん
22/07/14 23:52:28.92 fadaSACN0.net
気持ちわりぃなそのコード
986:デフォルトの名無しさん
22/07/15 00:00:11.50 9RgIX2Zba.net
>>973
どの辺りが?
それとも気持ち悪いって言いたかっただけ?
987:デフォルトの名無しさん
22/07/15 00:30:48.57 1ECLhEg6a.net
なんでスペースがアンダーバーなんだとは思うな
俺も見た目が受け付けなかったわ
988:デフォルトの名無しさん
22/07/15 00:48:33.55 kd+ZBNkRd.net
いや、そもそも自作自演だろ
989:デフォルトの名無しさん (ワッチョイ fdce-TkQT)
22/07/15 01:18:26 mFCZ39Ni0.net
Sub Main()
Dim a As String
Dim i As Long
Dim j As Long
For i = 1 To 5
a = Cells(i, 1)
For j = 1 To 5
If i <> j Then a = CutWord(a, Cells(j, 1))
Next
Cells(i, 2) = a
Next
End Sub
Function CutWord(a As String, b As String) As String
Dim aa() As String
Dim bb() As String
Dim c As String
Dim i As Long
aa = Split(a, " ")
bb = Split(b, " ")
For i = LBound(aa) To UBound(aa)
Dim j As Long
For j = LBound(bb) To UBound(bb)
If aa(i) = bb(j) Then Exit For
Next
If j > UBound(bb) Then
If c <> "" Then c = c & " "
c = c & aa(i)
End If
Next
CutWord = c
End Function
990:964
22/07/15 02:31:06.28 bSLom3XEd.net
早速ご回答いただいた皆様、ありがとうございました!
ほぼ思い通りの結果を得ることができました。
ちなみにですが、
例えばA6に「DOG CAT RABBIT COW BEAR」というデータがある場合、
各単語がどれとも重複していないため「DOG CAT RABBIT COW BEAR」そのまま5単語が残ります。
各データのユニークな単語を最小数で残すことは可能でしょうか?
下記のような形です。
A
1 RED BLUE APPLE
2 RED BLUE BANANA
3 RED BLUE GREEN ORANGE
4 RED BLUE YELLOW WHITE GRAPE
5 RED BLUE WHITE CHERRY
6 DOG CAT RABBIT COW BEAR
↓
B
1 APPLE
2 BANANA
3 GREEN ORANGE
4 YELLOW GRAPE
5 CHERRY
6 DOG
度々申し訳ございませんが、よろしくお願いいたします。
991:デフォルトの名無しさん
22/07/15 02:36:26.14 WFW52ORLM.net
いつものあいつだぞ
992:デフォルトの名無しさん (ワッチョイ fdce-TkQT)
22/07/15 06:01:47 mFCZ39Ni0.net
最小限の定義が不明
993:デフォルトの名無しさん
22/07/15 07:03:30.04 ymO8mssad.net
Sub Main()
Dim a As String
Dim i As Long, j As Long
Dim last As Long
last = Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To last
a = Cells(i, 1)
For j = 1 To last
If i <> j Then a = CutWord(a, Cells(j, 1))
Next j
Cells(i, 2) = a
Next i
End Sub
Function CutWord(a As String, b As String) As String
Dim aa() As String
Dim bb() As String
Dim c As String
Dim i As Long, j As Long
aa = Split(a, " ")
bb = Split(b, " ")
For i = LBound(aa) To UBound(aa)
For j = LBound(bb) To UBound(bb)
If aa(i) = bb(j) Then Exit For
Next j
If j > UBound(bb) Then c = c & aa(i) & " "
Next i
CutWord = Trim(c)
End Function
994:デフォルトの名無しさん (スッププ Sd43-jVDF)
22/07/15 07:30:27 KClfAjojd.net
俺のコードをいじってくれてうれしいが
Valueとったり改行いじったりしてるだけで行数減らしてるだけなんて結局マイルールのこだわりを主張してるだけなんだよな
こんな方法あるぜってのが見たいわ
>>978
6が「DOG」になる最小数という意味が不明
先頭の単語を返すだけならCutWordの最後でaとcが同じ値になったらaa(LBound(aa))を返すようにすればいいのでは
995:デフォルトの名無しさん (アウアウウー Sa09-/dRU)
22/07/15 07:47:41 9RgIX2Zba.net
value取るのは
996:改悪で草
997:デフォルトの名無しさん (アウアウウー Sa09-DHlW)
22/07/15 08:08:12 DqNyEc18a.net
>>964
複数回現れる単語を削除すればいいのか?
Sub X964()
Dim Sheet As Worksheet: Set Sheet = ...
Dim Dictionary As Object: Set Dictionary = CreateObject("Scripting.Dictionary")
Dim LastRow As Long: LastRow = SheetSheet.Cells(Rows.Count, "A").End(xlUp).Row
Dim Row As Long
For Row = 1 To LastRow
Dim Word As Variant
For Each Word In Split(Sheet.Cells(Row, "A").Value, " ")
If Dictionary.Exists(Word) Then
Dictionary(Word) = Dictionary(Word) + 1
Else
Dictionary.Add Word, 1
End If
Next
Next
For Row = 1 To LastRow
Dim Uniques As String: Uniques = ""
For Each Word In Split(Sheet.Cells(Row, "A").Value, " ")
If 1 < Dictionary(Word) Then
If Uniques = "" Then
Uniques = Word
Else
Uniques = Uniques & " " & Word
End If
End If
Next
Sheet.Cells(Row, "B").Value = Uniques
Next
End Sub
998:デフォルトの名無しさん (アウアウウー Sa09-DHlW)
22/07/15 08:10:06 DqNyEc18a.net
>>973
気持ち悪いとは思わないけどちょっと非効率かなとは思う
999:デフォルトの名無しさん (ワッチョイ cbda-VQN5)
22/07/15 08:49:49 pxeFAKZo0.net
そのコードカッケェ!
1000:デフォルトの名無しさん (スフッ Sd43-TkQT)
22/07/15 09:42:45 D6klNH8hd.net
Sub sample3()
Dim r As Long
Dim z As Long '最終行
Dim s As String '全データ
Dim a() As String '単語リスト
Dim i As Long
z = Cells(Rows.Count, 1).End(xlUp).Row
For r = 1 To z
Cells(r, 2) = Cells(r, 1)
s = s & Cells(r, 1) & " "
Next r
a = Split(s, " ")
For i = LBound(a) To UBound(a)
If Len(s) - Len(a(i)) > Len(Replace(s, a(i), "")) Then '2回以上出てくるか
For r = 1 To z
Cells(r, 2) = Trim(Replace(Cells(r, 2), a(i), "")) '各セルから削除
Next r
End If
Next i
End Sub
1001:デフォルトの名無しさん (アウアウウー Sa09-jVDF)
22/07/15 09:47:20 kfkt8EAfa.net
効率どうこう言う前に重複した単語がでるような関数はどうかと思うのw
1002:デフォルトの名無しさん
22/07/15 13:22:47.81 kd+ZBNkRd.net
ここでRuby馬鹿がRubyではこうなるとか書くのは見えている
1003:デフォルトの名無しさん
22/07/15 19:00:37.71 f/pTHFXb0.net
オレンジ色のオレンジはどうなの?
1004:デフォルトの名無しさん
22/07/15 19:14:37.65 pxeFAKZo0.net
どんなに良コード書いても難癖付けられるのがこのスレ
1005:デフォルトの名無しさん
22/07/16 02:37:29.28 hVvvoOFI0.net
userformをshowした直後にunloadするとexcelが落ちるのは何とかならんかのぉ
hideじゃだめなんじゃunloadじゃないと
1006:デフォルトの名無しさん
22/07/16 07:52:34.81 1SMMBEmo0.net
UserForm1.Show vbModeless
Unload UserForm1
って意味なら、別に落ちなかったけど
1007:デフォルトの名無しさん
22/07/16 08:52:29.38 eHBMNsDF0.net
逆になんでhideじゃダメなの
1008:デフォルトの名無しさん
22/07/16 13:26:34.40 NLVpHfZz0.net
とりあえずEXCELが落ちるっていうコードと環境出せ
話はそれからだ
1009:デフォルトの名無しさん
22/07/16 18:00:44.38 2WLM14wy0.net
>>978
Ruby で作った
require "csv"
input_str = <<"EOT"
RED,BLUE,APPLE
RED,BLUE,BANANA
RED,BLUE,GREEN,ORANGE
RED,BLUE,YELLOW,WHITE,GRAPE
RED,BLUE,WHITE,CHERRY
DOG,CAT,RABBIT,COW,BEAR
EOT
csv = CSV.new( input_str )
input_ary = csv.read # 2次元配列
# 各単語の出現回数を数える。Hash の初期値は、0
hash = input_ary.each_with_object( Hash.new( 0 ) ) { |row, hash|
row.each { |word| hash[ word ] += 1 }
}
# 出現回数が2以上の単語を削除する
input_ary.map! { |row|
row.delete_if { |word| hash[ word ] >= 2 }
row
}
# 2次元配列を、CSV 文字列に変換する
csv_str = input_ary.map( &:to_csv ).join
puts csv_str
1010:デフォルトの名無しさん
22/07/16 19:45:04.74 vYu+PcKIa.net
>>996
廃止決定した言語じゃん
1011:デフォルトの名無しさん
22/07/17 00:22:00.69 lEW2LcQY0.net
あんたら色んな言語を習得していてエリートなんだな?
5ちゃんねるなんかにいてもったいねーわ
1012:デフォルトの名無しさん
22/07/17 02:44:22.32 rPHWMq+g0.net
>>995
993と同じ、2行だけ
エクセルは2013
>>994
閉じたWebbrowserを再表示する方法がわからないので仕方なく
1013:デフォルトの名無しさん
22/07/17 04:50:23.78 fLi6s9i70.net
こいつの書くコード、rubyとしてもクソコードなのがほんとひどい
1014:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 77日 2時間 26分 42秒
1015:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています