Excel VBA 質問スレ Part77 at TECH
[2ch|▼Menu]
[前50を表示]
800:デフォルトの名無しさん
22/10/04 21:08:36.46 vyetwO+c0.net
Dim ar(2) As Variant
ar(0) = 1
ar(1) = 2
ar(2) = Split("1,2,3,4,5", ",")
Dim i
For i = 0 To UBound(ar(2))
ar(2)(i) = CLng(ar(2)(i))
Next i
splitで作ったジャグ配列の中身をlong型に変換したいです。
variant変数に一度入ったらもう無理ですか?
一応他の変数に入れる事で型変換には成功するのですが。
余計な変数を二つも用意してstringで作成されたのを一時的なvariant型ノーマル配列に
おさめてmそのあとで本当に使いたい配列のジャグ配列に入れていくというのが
どうも汚い感じで腑におちません。
アドバイスもらえると助かります。

801:デフォルトの名無しさん
22/10/04 22:26:54.77 cce3s7590.net
>>800
出来ません
諦めてください

802:800
22/10/04 22:43:48.69 vyetwO+c0.net
>>801
ありがとうございます。
ジャグ配列はRedim出来ないのがデメリットですね。
動的な配列の中にジャグ配列なのですが、なんとか先に不確定な親配列の中にある
不確定な数のジャグ配列を一時的なLong型配列に作って
そこからさらにsplitなしでなんとか作ろうとあれこれしてたら
よっぽど>>800の方法の方が処理がわかりやすくなってしまい徒労に終わりました。
諦めます。踏ん切りつきました。

803:デフォルトの名無しさん
22/10/04 23:35:06.72 o+JurUyd0.net
>splitで作ったジャグ配列
>動的な配列の中にジャグ配列
ジャグ配列って用語の使い方が微妙に間違ってる気がするが...
そもそも文字列を分割して配列作ってるんだから文字列の配列になるのが当然で
Variant上等でやるなら、それを使う側がVariantで受ければいいだけでは?
まあ俺ならどうしても文字列をSplitしてLongにしたいなら
Longの配列返すSplitのラップ関数作るけど

804:デフォルトの名無しさん
22/10/05 04:48:52.00 b9GTOuH90.net
sqliteで作ったジャグ配列。

805:デフォルトの名無しさん
22/10/05 07:10:06.74 8YZU4Hq7a.net
>>797
それでいくとうまくいくんだけどね、
通常のPictures.Insertだとリンク貼付けなのよ。他人に送付したら見れない。
だから一旦クリップボード経由でPaste使ってやってるんだがそれだと容量がヤバくなる。

806:デフォルトの名無しさん
22/10/05 08:07:32.65 hw4y4dFR0.net
そもそも何でもかんでも配列で処理しようとするのがちょっとねぇ。
例えば列に当たる要素毎に違う型を使いたいなら
ちょっと仕組みは大きくなるけどADODBのRecordsetを使うことや
1行の列データ単位の値を格納するクラスを作ってそれを行単位としてディクショナリやコレクションに追加して行くことも検討することを視野に入れると
結局後で読みやすく汎用性の高いロジックが組めたりする。
処理速度優先なら配列一択だからそのときのシュチュエーションに合わせて使い分けだね。

807:デフォルトの名無しさん
22/10/05 08:19:21.40 SsR8S72r0.net
構造体ではできんの?
ジャグ使う機会無いからなんとも言えんが

808:デフォルトの名無しさん
22/10/05 10:50:57.71 HrKgxVhUd.net
すぐDBとか持ち出す奴いるけどコスト考えたらそう簡単にDBなんか使わんと思うけどね
普通に配列処理用の関数のみのモジュールでコード管理すればいいだけと思うわ

809:デフォルトの名無しさん
22/10/05 13:20:52.03 7KiNZ4t1d.net
>>808
何のコスト?

810:デフォルトの名無しさん
22/10/05 14:41:00.50 bxBPBLxH0.net
やっぱ好きなように作るのが1番ね

811:デフォルトの名無しさん
22/10/05 15:47:13.70 DsSYxIFi0.net
ワークシートがDBみたいなもんだしね

812:デフォルトの名無しさん
22/10/05 15:53:15.41 tZ9pwx2fM.net
学習コスト

813:デフォルトの名無しさん
22/10/05 21:19:11.66 /BrWnOTx0.net
コストコ

814:デフォルトの名無しさん
22/10/05 23:35:05.88 bxBPBLxH0.net
コスパ良い

815:デフォルトの名無しさん
22/10/06 16:49:22.22 wENRazb+d.net
例えば、誕生石を取得するGetBirthStone関数を作ろうとすれば引数は「日付 as Variant」と「月 as Integer(Long)」のどちらがいいでしょうか?

816:デフォルトの名無しさん
22/10/06 16:54:16.04 lmEPcDvIM.net
Dateではあかんのか?

817:デフォルトの名無しさん
22/10/06 16:55:37.45 1FPDwTBGM.net
そんなもんVLOOKUPで誕生石シートを検索すれば十分
VBAを正しく使うコツはVBAを可能な限り書かないことだよ

818:デフォルトの名無しさん
22/10/06 17:19:15.50 wENRazb+d.net
>>816
Date型でも大丈夫ですか?
一応、最初の部分はこう書いてみました
If Not IsDate(日付) then
GetBirthStone = CVErr(xlErrValue)
Exit Function

819:デフォルトの名無しさん
22/10/06 17:48:34.71 KR9VbeXw0.net
>>817
いや、むしろVBAだけの方がメンテしやすい
データとロジックは分ける方がいい

820:デフォルトの名無しさん
22/10/06 19:10:02.45 YSVEcn1gd.net
>>815
元のデータが何によるかで違うけど「月 as Integer(Long)」でいいのではと思う
仮に元のデータが日付でもGetBirthStone(Month(日付))で済む
月を渡すようなケースがありえないなら日付を渡して関数内でMonthを使うでもいい

821:デフォルトの名無しさん (ワッチョイ 435f-pIDl)
[ここ壊れてます] .net
月だけでいい
特定の日付に依らずある月の誕生石を知りたい場合に
意味のないDate値用意しなきゃいけなくなるから可読性が落ちる

>>817
誕生石みたいに改訂されたことがニュースになるくらい固定されてる内容ならコードにベタ打ちでいいと思う
祝日みたいに毎年変動するものとか、組合せの数が多すぎる要素ならシート管理の方が扱いやすいと思うけど

822:デフォルトの名無しさん (ワッチョイ d3da-pIDl)
[ここ壊れてます] .net
>>815
その程度のこと自分で決められんようでは時間かかってしょうがないだろ

823:デフォルトの名無しさん (ワッチョイ 6f8c-SQdC)
[ここ壊れてます] .net
>>815
Function getBirthStone(日付 As Date)
Application.Volatile True
getBirthStone = WorksheetFunction.Choose(Month(日付), "ガーネット", "アメシスト", "アクアマリン", "ダイヤモンド", "エメラルド", "ムーンストーン、真珠", "ルビー", "ペリドット", "サファイア", "オパール、トルマリン", "トパーズ", "トルコ石、タンザナイト")
End Function

こんなかんじ?

824:デフォルトの名無しさん
22/10/06 22:32:10.00 wENRazb+d.net
>>823
ありがとうございます。

825:デフォルトの名無しさん
22/10/06 22:47:25.99 HCQdlFdq0.net
>>823
わざわざワークシート関数を呼ばなくてもVBAにもChoose関数あるよ
URLリンク(learn.microsoft.com)

826:デフォルトの名無しさん
22/10/06 23:06:53.10 gOgPUvPm0.net
ほんとだw てへ

827:800
22/10/09 17:09:18.30 Kilq6kjS0.net
>>803
ラップ関数作る解決方法最高です。
頭固かったです。
他にも導入できそうなところが見つかり助かりました。
感謝です。

828:デフォルトの名無しさん
22/10/10 21:48:05.32 P58+Ol8v0.net
>誕生石みたいに改訂されたことがニュースになるくらい固定されてる内容ならコードにベタ打ちでいいと思う
>>823を見ての通りこの手は表記ゆれが問題になる事が多いから
可能な限り外部データにした方がいい

829:デフォルトの名無しさん
22/10/11 13:53:54.44 uAPvvwer0.net
インプットボックスで入力される値が数字かどうか判断するコードってどう書けばいい?

830:デフォルトの名無しさん
22/10/11 14:15:03.61 fEDU7G4fd.net
・符号(+-)を許すか
・ドット(小数点)を許すか
・カンマ(桁区切り)
を踏まえて文字の妥当性チェックすればいいんじゃないの

831:デフォルトの名無しさん
22/10/11 14:17:40.55 fEDU7G4fd.net
あと自分はWorksheetFunction使うの好きじゃないけど
WorksheetFunction.IsNumber
でもいいかもね

832:デフォルトの名無しさん
22/10/11 14:26:37.29 H84z/pNR0.net
全角は?漢数字は?ローマ数字は?欧米式の桁区切りは?
入力検査は考え始めるとキリがない分野の一つだぜ

833:デフォルトの名無しさん
22/10/11 15:13:10.17 DoWcBI1l0.net
>>829
IsNumericじゃダメなの?

834:デフォルトの名無しさん
22/10/11 17:02:04.45 uAPvvwer0.net
>>833
さんきゅーそれだ
てかVariant型が数値かどうか調べられるんだな~
書き方解ったらvartypeとかtypenameでも行けそうな気がする
ちょい試してみよ

835:デフォルトの名無しさん
22/10/11 18:13:13.59 DoWcBI1l0.net
>>834
語弊があるといけないから言っておくと、
IsNumericはあくまで数値として扱える値(数値に変換出来る値)かどうかを判定するよ。
だからString型でも”123”みたいのはTrueを返すからそこは注意してね。

836:デフォルトの名無しさん
22/10/11 20:16:52.08 hb9m45MO0.net
考慮点はまだあるぞ
IsNumericって
"\3"とか"3e3"とか"&habc"とかもTrueだぜ

837:デフォルトの名無しさん
22/10/12 08:33:18.55 FAaW2+wFd.net
じゃ足し算する関数を別に作ってノーエラーで戻ってきたら数値
Sub Main()
 '全角数字も数字と見なす
 If Suujikana(StrConv(InputBox("入力せぇ"), vbNarrow)) Then
  MsgBox "数字だよ"
 Else
  MsgBox "数字じゃないよ"
 End If
End Sub

Function Suujikana(moji As Long) As Boolean
 On Error GoTo er
 moji = moji + moji
 Suujikana = True
 Exit Function
er:
 Suujikana = False
End Function

838:デフォルトの名無しさん
22/10/12 08:35:48.26 FAaW2+wFd.net
あ、これじゃだめかえらーでるあ

839:デフォルトの名無しさん
22/10/12 08:38:00.09 FAaW2+wFd.net
このやろ、variantにしたら+で文字列つくりやがって
こんのやろぉ

840:デフォルトの名無しさん
22/10/12 08:39:59.19 FAaW2+wFd.net
これでいい?らめ?
Sub Main()
 '全角数字も数字と見なす
 If Suujikana(StrConv(InputBox("入力せぇ"), vbNarrow)) Then
  MsgBox "数字だよ"
 Else
  MsgBox "数字じゃないよ"
 End If
End Sub

Function Suujikana(moji As Variant) As Boolean
 On Error GoTo er
 moji = moji * moji
 Suujikana = True
 Exit Function
er:
 Suujikana = False
End Function

841:デフォルトの名無しさん
22/10/12 09:33:08.65 JFXNmWRt0.net
>>836
まぁその辺は数値として受け取れるとも言えるからね。
その辺除外したいなら最初に“¥”や“e”や“&h”が含まれていたら数値ではないって分岐入れとけばいいだけじゃないの?

842:デフォルトの名無しさん
22/10/12 09:45:17.75 05zETGAlM.net
>>840
自分も同じこと考えたけど型の制約が緩いと面倒くさそうなので思考を放棄した、よく頑張ったな

843:デフォルトの名無しさん
22/10/12 10:05:45.44 05zETGAlM.net
そういえば昔型はあるのとないのではどっちが良いのかって記事を見たことあるな
結局型がないと論理エラーが出ないように型をちゃんと理解する必要があるって書いてた

844:デフォルトの名無しさん
22/10/12 10:15:23.77 FnwlmZOz0.net
kgとkmは単純に足し算しても意味ないからな

845:デフォルトの名無しさん
22/10/13 04:03:11.23 j3UF+2500.net
別にVBA使わなくてもワークシート関数でできるじゃんって意見どう思う?

846:デフォルトの名無しさん
22/10/13 04:08:37.62 QthptHxba.net
やりたいようにやれ

847:デフォルトの名無しさん
22/10/13 05:43:31.20 l6HSpiwg0.net
>>845
内容によるけどまあワークシート関数でできるならその方がいいだろうな

848:デフォルトの名無しさん
22/10/13 06:51:28.60 R3JkkIAh0.net
A1に入力されているものが消えたらB1以降の入力セルデータが右から左に自動で繰り上がってくるようにしたいのですがこれで大丈夫ですか?
これをA20くらいまで適用したいんですけど教えて貰えませんか...?
Private Sub Worksheet_Change(ByVal
Target As Range)
If Target.Address = Range("A1").Address
And IsEmpty(Target) Then
Application.EnableEvents = False
lastrow = Cells (Rows.Count,
"A").End(xIUp).Row
Range("B1:F1"&lastrow).Copy
Range("A1").PasteSpecial xIPasteValues
Range ("A"&lastrow).ClearContents
Application.EnableEvents = True
End If
End Sub

849:デフォルトの名無しさん
22/10/13 11:53:03.67 Ue05WQwm0.net
キーボード操作でマクロ作って呼べばいいんじゃね

850:デフォルトの名無しさん
22/10/13 13:03:11.83 8suwpN2kr.net
"B1:F"&lastrow
下から4行目は何の処理かな
g列以降にデータがないなら、a列削除でもいけそう

851:デフォルトの名無しさん
22/10/13 13:57:54.49 UFLyO0SD0.net
xIUp >> xlUp >> xlLeft
xIPaste >> xlPaste
excel だから xl だよ
本から手入力したのかな

852:デフォルトの名無しさん
22/10/13 15:04:44.40 xeSsgHCJ0.net
文字列にしてTrimして
右から一文字づつAscでコード調べて数字判別してる

853:デフォルトの名無しさん
22/10/15 01:10:39.87 zmWNo0nm0.net
そういや何気にVBAの中でCallByName使うとJavaScript 使えるらしいね。
使ったことないけど。

854:デフォルトの名無しさん
22/10/15 01:25:23.69 eU4yePu40.net
>>853
どういうこと? どうやるの?

855:デフォルトの名無しさん
22/10/15 07:21:27.16 tw/asOzR0.net
>>853
文字列で言語書いて実行するのってどうも好きじゃないな
そもそも有効な場面ってあるんだろうか
URLリンク(bougyuusonnin.seesaa.net)
>>854
調べなよ・・・

856:デフォルトの名無しさん
22/10/15 09:05:24.46 zmWNo0nm0.net
>>855
さあ?
メソッドチェーンが使えるくらい?
まぁ無理して使うもんでもないような。
現にJavascript知っててもVBAに混ぜて
使うような状況なんてなったことないし、
大体記述がめんどいし。

857:デフォルトの名無しさん
22/10/15 09:07:30.39 tw/asOzR0.net
>>856
ありがとう
やっぱりほとんど無いよね。

858:デフォルトの名無しさん
22/10/16 03:31:09.39 IoSf1xr/0.net
メリットはネイティブの手段でJSONがパースできるようになる事なんだけどVBAで必要になることはほとんどないか
ちなみに似たような方法でHtmlFileからIEのjavascriptを呼ぶ方法もある

859:デフォルトの名無しさん
22/10/16 05:54:19.77 zEVEZIxw0.net
ネイティブ?

860:デフォルトの名無しさん
22/10/16 06:00:43.85 q8mBJvHk0.net
予め言語側で用意されてるってことじゃない

861:デフォルトの名無しさん
22/10/16 06:58:42.73 4eBUdjNxM.net
正規表現をRegExpオブジェクトで利用することはネイティブですか?

862:デフォルトの名無しさん
22/10/16 08:27:49.05 6FfxZTeW0.net
正規表現をRegExpオブジェクトで利用したらハゲますよ

863:デフォルトの名無しさん
22/10/16 23:46:46.75 n3hO69PQ0.net
性器のことしか考えてないから禿げるんじゃね

864:デフォルトの名無しさん
22/10/17 02:28:59.55 Foj5GBltM.net
正規表現はexcelapiを使うのが楽

865:デフォルトの名無しさん
22/10/17 17:47:22.14 LwSzkOCXr.net
すみません、質問させてください
range内の空白セルを除いた部分を一気に配列に入れる方法ってありますか?
例えばA1、B2、A3、B3に1が入っていて、Range(Cells(1,1) ,Cells(2,2))を選んでいる状態で配列ArrにArr(1,1)=1、Arr(1,2)=1のみを入れる。ということです
「Range(Cells(1,1) ,Cells(2,2))を選んでいる状態」というのはFunctionで関数を作ったときにこの範囲を選んでいるという意味です
CurrentRegionを使ってもA2、B2の空白まで配列に入ってきてしまって困ってます

866:デフォルトの名無しさん
22/10/17 17:53:55.90 c98RAUt6M.net
selectionでforeach回せばできる気がするけどな

867:デフォルトの名無しさん
22/10/17 18:05:29.40 PbBQX3S8M.net
一気にやるなら判定文をスピルで一気に適用するか

868:デフォルトの名無しさん
22/10/17 18:22:32.67 KXCnFpZrr.net
すみません、先程の質問の意図はvba 100本ノックの以下の問題を解いていましたURLリンク(excel-ubara.com)
最初に範囲内を配列にすべて入れてdictionaryで出す方法を考えたんですけど、範囲のところがA1:C5とかならいいのですが、A:Cだと、すべての行まで配列に入ってしまって、それの行すべて処理するようになってしまったので、数字が範囲内の最終行までを配列に入れることができれば処理速度も変わるので、そういう方法があればという質問でした

869:デフォルトの名無しさん
22/10/17 18:56:02.19 eqEJLsQnM.net
答えも解説も書いてあるんだからそれ見ろよ

870:デフォルトの名無しさん
22/10/17 20:25:02.38 sP2+Ci5U0.net
>>864
へーそんなのあるのか

871:デフォルトの名無しさん
22/10/17 21:15:18.56 8otnrSal0.net
作成依頼です。
G列に空白セルがあった場合、その空白セルの隣のセルに入力されている値をクリアにする。
というコードを作成いただけないでしょうか。
よろしくお願いします。

872:デフォルトの名無しさん
22/10/17 22:12:03.14 ISXu5HOG0.net
いやです

873:デフォルトの名無しさん
22/10/17 22:18:07.47 +NOpXqIT0.net
待て、これは孔明の罠だ

874:デフォルトの名無しさん
22/10/17 22:23:49.67 AIOop8Dz0.net
F、G、H列を無条件で消せばいいのね

875:デフォルトの名無しさん
22/10/17 22:24:49.52 tLF3dHHy0.net
隣とはどっちだ
あまりにも指示が不明瞭でバカが書いたとしか思えない文章
スルーで決定

876:デフォルトの名無しさん
22/10/17 22:28:51.88 dYe0p6CB0.net
>>871
マジレスするとここは質問スレであり
作成要請スレではありません。
作る方法等を聞けば教えてくれる人もいるかも知れませんが、作ってくれと丸投げにした場合、
その見返りを要求されるか一蹴されるかして終わるのが関の山です。
自分でそう言った趣旨のスレを探すか立てるかした方が賢明と思われます。

877:デフォルトの名無しさん
22/10/17 22:46:52.95 /WpPTN/JH.net
>>871
welcome to スレリンク(tech板)

878:デフォルトの名無しさん
22/10/17 23:47:38.34 yX88xE7Ya.net
>>874
消す方だったか、"クリア"って書くのかと思ったぜ

879:デフォルトの名無しさん
22/10/17 23:49:43.92 +NOpXqIT0.net
>>878
甘い
空(そら)と白(しろ)で合わせて空白まで読み取らないと

880:デフォルトの名無しさん
22/10/18 05:15:15.98 s0SrGZFEa.net
4000件くらいのデータのExcelファイルから
A. 特定の数十件の社員データを除いたデータファイル
B. Aで除いた数十件の社員のデータのみのファイル
を作成しなければなりません
元のファイルを2つFileCopyして
・Aから対象社員のデータをUINONメソッドでRangeに格納して一括削除
・Bから非対象社員のデータをUINONメソッドでRangeに格納して一括削除
もしくは
・Aから対象社員データをAutoFillterしてBに貼り付け
→Aから対象社員データ削除
を考えてますがどちらが速いでしょう
元の書式を活かしたExcelファイルが必要なので
CSV出力やExcelファイルにデータのみ転記することはできません

881:デフォルトの名無しさん
22/10/18 05:41:41.52 o16XpPR+M.net
何度も繰り返し行なう作業とか面倒な作業ならVBA使うメリットもあるけど、その程度ならシートコピーとフィルターでさっさと手作業で済ませた方が手っ取り早いのでは?

882:デフォルトの名無しさん
22/10/18 07:10:04.49 v8qBslO70.net
>>880
画面の書き換えだけ止めとけば、たぶん、どの方法でも大差ないと思うよ
Unionは重いから、削除は一括じゃない方がいいかも
気になるならベンチマークとってみれば?

883:デフォルトの名無しさん
22/10/18 07:14:36.77 NY9qjYA4d.net
>>876
>コード書き込みや作成依頼もOK
1をよくみような

884:デフォルトの名無しさん
22/10/18 08:05:51.17 YCyRiw4bM.net
個人的にはコード作ってとか書かれてたら困ってるんす金くださいと言われてるくらい嫌なので余計に作らないわ~
書くのは勝手だけど

885:デフォルトの名無しさん
22/10/18 08:46:11.19 q+c/s7kpM.net
誰もお前には頼んでないのに、俺は作らない宣言しちゃう人って自意識過剰すぎません?

886:デフォルトの名無しさん (ワッチョイ 2bcd-7iBv)
[ここ壊れてます] .net
>>871
1:30で書けたけど・・・
これぐらい書くのにみんなどれぐらい時間かかるもんなの?

Sub foo()
最終行 = Cells(Rows.Count, 7).End(xlUp).Row
For i = 1 To 最終行
If Cells(i, 7) = "" Then
Cells(i, 6) = ""
Cells(i, 8) = ""
End If
Next
End Sub

887:デフォルトの名無しさん
22/10/18 09:45:31.08 345TXlIrM.net
>>880
回答待つより実際に作って比較した方が早くない?

888:デフォルトの名無しさん
22/10/18 10:14:58.17 UuGhYYcHd.net
>>887
いい回答だと思う
自分でやればわかることを他人に聞くのってほんとバカなのかなと思う

889:デフォルトの名無しさん
22/10/18 10:42:22.37 fjjhfMGv0.net
>>871
Ruby で作ってみた。
未入力の列はnil となるので、a, c も未入力となる
require 'csv'
input_text = <<TEXT
,a
b,b
,c
TEXT
output_text = String.new
CSV.filter( input_text, output_text ) { |row|
row[ 1 ] = nil unless row[ 0 ] # nil の時
}
print output_text
出力
,
b,b
,

890:デフォルトの名無しさん
22/10/18 11:09:36.18 NJQ5BOf00.net
>>885
で、誰もお前に意見聞きたいとか頼んでないのにどうしてそんな自意識過剰な反応してんの?

891:デフォルトの名無しさん
22/10/18 13:16:40.55 O7d9QRYR0.net
>>889
見づら!
なにこのクソ言語

892:デフォルトの名無しさん
22/10/18 14:44:23.15 5fCnmsLA0.net
>>886
2~3分だな90分もかからんよ

893:デフォルトの名無しさん
22/10/18 19:46:45.52 LJ6jaE7r0.net
ちょうど今日別々のシートの範囲Unionして二次元配列にしようと思ったらエラーだったな
同一シートじゃないと無理らしいね
二次元配列同士を結合したからまあいいけど

894:デフォルトの名無しさん
22/10/18 21:13:25.02 bD7mk4M6d.net
>>886
Nextのズレが気になって気になって今日は眠れないわ

895:デフォルトの名無しさん
22/10/18 23:15:32.25 fRTdwDaSa.net
変数に漢字w = 0

896:デフォルトの名無しさん
22/10/19 15:06:47.27 XsVwav6s0.net
マウスで範囲指定した複数のセルから値を受け取ったり書き込んだりする方法はありますですか?
"A1:C3" と指定した状態でそこに有る数値をVba側で受け取って一つ一つ何かをしたあと、
また今の指定した範囲のセルに書き込むとかです。
一つのセルであれば、ActiveCell.Value とすればいいですよね。

897:デフォルトの名無しさん
22/10/19 15:45:02.14 RzDK/9cQa.net
日本語が不自由な人多いな

898:デフォルトの名無しさん
22/10/19 16:40:42.06 kjFQ3fMO0.net
>>896
Application.Selection.Valueで出し入れできる
基本的に2次元配列を操作することになるが、
単一のセルだと配列にならないとか
複数の領域が選択されていたときにどうするかとか
細かいところを考えることになる

899:906
22/10/19 20:54:47.64 wavRu5Wg0.net
>>898
大変重要なキーワードを提示いただきありがとうございます。
とりあえずの目的は達成できました。
また、これで詳しい内容をググりに行けますです。

900:906
22/10/19 22:12:45.50 wavRu5Wg0.net
ここに書いてありました
URLリンク(detail-infomation.com)

901:デフォルトの名無しさん (ササクッテロラ Sp0f-HPGf)
22/10/20 01:06:22.80 Rvw6iN3vp.net
>>886
>>889
ありがとうございます。

902:デフォルトの名無しさん
22/10/20 06:04:53.46 I98JYgIT0.net
外出先でもスマホからマクロ実行したいからGASでプログラムやろうかと思ってる

903:デフォルトの名無しさん (ワッチョイ 9f42-M5DG)
22/10/20 07:03:58.77 D7MvRF2u0.net
勝手にやればええやん

904:デフォルトの名無しさん
22/10/20 09:47:53.53 gU8aHBR/M.net
GASいいよね
Googleスプレッドシートは単一のブックを皆で共有してつつき回すのが前提だから、
Excel VBAでよくあるようにデータとマクロ用ブックを分けて部署別の複数のデータファイルをVBAでまとめて集計するみたいなことをする必要性が低くて、
そもそもGASを書かなくて済むケースが多かったりする
外部APIとのデータ連携が必要なときくらいだな

905:デフォルトの名無しさん
22/10/20 10:11:29.65 od/5Btdhd.net
ここで広げる話じゃねぇ

906:デフォルトの名無しさん
22/10/20 11:53:08.75 jbEEQ7MN0.net
GASってスマホからも動かせるの?

907:デフォルトの名無しさん
22/10/20 12:40:27.98 gU8aHBR/M.net
もちろん

908:デフォルトの名無しさん
22/10/20 17:44:35.99 zIYHKHDh0.net
>>904
それってWeb版EXCELと何が違うの?

909:デフォルトの名無しさん
22/10/20 17:58:16.85 wfln4dMhM.net
もちろん違わないよ
全く同じことがWeb版Excelにも言える
まあExcelにしちゃうとせっかく共有してても結局ローカルコピーを作るバカが必ず出てきて邪魔になりがちだから、間違った使い方をするのが難しいという点では好ましいかもね

910:デフォルトの名無しさん
22/10/20 18:01:51.16 rx8Gs0n5M.net
それはWEB版を使いにくいと思ってる人が居るってことでは?

911:デフォルトの名無しさん
22/10/20 23:20:50.15 I98JYgIT0.net
試しにAndroidスマホからボタン(図形)をクリックしたけどgasを実行できなかったよ
なんか色々と制約があるみたいだし、JAVAやC#でスマホアプリ作ったほうがいいな

912:デフォルトの名無しさん
22/10/21 00:43:10.35 HmQfBwoT0.net
どんどんスレの趣旨からはなれtrくなー
そもそもスマホアプリ作るならAndroidでC#使うならXamarin使うことが前提になるしiPhoneならSwiftかObjectiveCだろ
WindowsPhoneならxamlとC#かVB.Netで作ること出来たけど死滅しちゃったからなー
Javaは実行時に中間コード翻訳が挟まるから重いし
やっぱりスマホはiPhoneをSwiftで開発するのが最強だろうな
AppleのMacで開発することが前提になるからちょいお金が必要になるけど。
ExcelのVBAやってる人はMac買うんなら別途Windows も必要だな
MacのEXCELはVBAまともに動くことを期待しない方がいいから。

913:デフォルトの名無しさん
22/10/21 01:50:58.42 6vVdUlmSd.net
>>912
突っ込み所が多過ぎ

914:デフォルトの名無しさん
22/10/21 08:00:32.41 K0Nv/hCp0.net
>>912
突っ込み所がほんと多過ぎ

915:デフォルトの名無しさん
22/10/21 17:19:06.50 qYJSQXItd.net
質問ですが、
シートに動的に追加したボタンに対して、共通のクリックイベントを追加したいのですがやり方がわかりません。
教えてほしいです。
activesheet.buttons.addで追加したボタンに対して、
クラスモジュールで作成したクリックイベントを結びつけたいです。

916:デフォルトの名無しさん
22/10/21 17:20:50.78 qYJSQXItd.net
動的にボタン作成しながらそのボタンに対して共通のクリックイベントを結びつける方法です

917:デフォルトの名無しさん (ワッチョイ 9fd8-NYmr)
22/10/21 18:49:07.97 7JSr5kXR0.net
>>916
.OnAction プロパティにプロシージャ名を設定

918:デフォルトの名無しさん (ワッチョイ 7b2f-KWxC)
22/10/21 19:01:18.29 DZ21JFev0.net
基本的にはボタンのOnActionにマクロ(Subのメソッド)名を設定すればいいんだが
クラスモジュールのメソッドとか直接指定できないんじゃないかな
間に標準モジュールかますとかすれば行けると思うが

919:デフォルトの名無しさん (スッップ Sdbf-h7FX)
22/10/21 19:01:59.59 2/IIqD8Nd.net
マクロの記録でもやればおおよそやりたい事のひな型のコードはできると思うんだよね
そういうやり方で解決できない人ってなんだろと思う
ActiveSheet.Buttons.Add(168, 108, 186.75, 66.75).Select
Selection.OnAction = "Macro1"
マクロで作ったこれを参考にすればいいんじゃないのと思うが
Addで作ったものをObject型の変数で受け取ってその変数のOnActionに代入するだけでしょ
それにググればこの程度はいくらでもでてくるんだけどね

920:デフォルトの名無しさん
22/10/21 23:26:00.91 HmQfBwoT0.net
>>918
確かに。
何でクラスモジュールのメソッドに紐付けようとするか謎だよな。
そもそもそれにはインスタンスが生成されていなければならない訳だし
VBAのクラスはそこまで万能では無いからシングルトンパターンでよく使われるみたいに自分で自分を生成することも出来ない。
そうすると前もって生成したインスタンスのメソッドに紐付けるしかない訳だけどそんなことVBAのクラスで本当に出来るのか?と思ってしまうわな。

921:デフォルトの名無しさん
22/10/22 09:44:18.85 +w0aEr6Jd.net
クラスのモジュールではなくてもいいんですけど、何かしらの共通メソッドを呼び出せるようにしたいです。
動的に作った編集ボタンが100個くらいあって、編集するフォームを呼びだす共通メソッドに紐付けたいです。

922:デフォルトの名無しさん
22/10/22 10:00:21.77 tvj8JbCcF.net
初心者向けサイトに出てくるWithEventのやつじゃないの
クリックならいけるけどEnterとか一部はだめだから使わなかった

923:デフォルトの名無しさん
22/10/22 10:24:34.97 ivMt1YnGp.net
>>921
それは同じ関数呼んで引数で関数内で何とかするんじゃダメなの?

924:デフォルトの名無しさん
22/10/22 10:41:03.80 ANF77yYL0.net
この辺?
URLリンク(thom.hateblo.jp)
Newしたcommandbuttonにaddeventhundlerみたいなことって出来ないのかな

925:デフォルトの名無しさん
22/10/22 10:49:28.11 tqPxko+s0.net
だから何人も.OnActionだって言ってるのにアホなん?

926:デフォルトの名無しさん
22/10/22 11:20:03.36 c1Knyq/s0.net
目的や使用場面が不明だけど、それは1Sheet上にボタン100ヶ必要なものなのか?
そのボタンは、どう配列・配置されるものなのか マス目に10×10とかなのか、タテとかヨコにぞろぞろ100ヶなのか
何らかのデータの塊の傍にボタンを動的に配置し、それを押すことでひな型の編集フォームを呼び出すというのか
>>924 とか上に書かれてきたサンプルを参考にして苦心して作れたとしても、結果として「それ違くね?」には成らないのか
設計の妥当性が問われる
「動的に編集ボタンをつくる」ための何らかのイベントが在るわけだし、だったらそれに結びつけた方が無駄が少ない とも

927:デフォルトの名無しさん
22/10/22 15:30:44.10 UYHwlHOK0.net
>>926
確かにねー
でもリストの行の横っちょにボタン付いてて
そのボタン押すとその行のデータ読んできて処理するとか
ExcelのVBAじゃなくてもよくあることだし
そう考えると100どころか1000くらいくっついてても
それがユーザーにとって使いにくいとは言い切れない
ケースもあるから何とも言えないね

928:デフォルトの名無しさん
22/10/22 16:00:19.50 Md3R6uzp0.net
ポタン100個つけるならフォームは考えないでワークシートでselectionchangeでいいと思う

929:デフォルトの名無しさん
22/10/22 16:21:19.65 ANF77yYL0.net
onclickでセルによって判別でもいいかもね

930:デフォルトの名無しさん (ブーイモ MMe6-QNr5)
22/10/22 17:25:01.86 R6+v0VTJM.net
>>929
あ、そっちのほうがいいね

931:デフォルトの名無しさん
22/10/22 18:08:51.98 8rFwb/oz0.net
ボタンって最大何個ぐらい貼り付けできるんだろ?
メモリがあれば10万個とか貼れんのかな

932:デフォルトの名無しさん
22/10/22 18:14:52.06 CPpJyo/d0.net
>>928
>>929
確かにボタンにこだわる必要はないですね
セルクリック時にフォーム呼び出したらいいですね

933:デフォルトの名無しさん
22/10/22 22:30:23.86 GMPaa0s5d.net
と言う事で無事解決しましたね

934:デフォルトの名無しさん
22/10/23 11:33:27.17 le1S+yxh0.net
Excelのイベントに onclick とか無いけどな
OnDoubleClick ならあるけど 余計な位置でクリック・ダブルクリックした時に
そのたんびに編集フォーム出るのを対策必要かな
違うイベントに関連付けた方がいいのかな

935:デフォルトの名無しさん
22/10/23 16:22:22.37 BP6ngYdb0.net
まあワイだったら単純にするために、
セル(か行)を選ばせて、
ボタンではその値を参照してフォームに渡させるって感じで作るけどな
シートにオブジェクト何個も置くのはワイ的に無し

936:デフォルトの名無しさん (ワッチョイ 05da-ze3V)
22/10/23 18:53:55.43 WPTFsqfB0.net
初心者は100ぐらい根性で書けばいいのだ

937:デフォルトの名無しさん
22/10/23 20:53:35.93 +izIRcqGM.net
>>936
そのあと「これは効率が悪い」と気付いて修正するならいいけど、それしか考えられず500,1000と増やし続けているおじさんがウチの会社にいます。

938:デフォルトの名無しさん
22/10/23 23:34:27.69 3vnbJWYw0.net
>>935
セルを選択させてボタンを押してその行の値をユーザーフォームに引き渡すの?

939:デフォルトの名無しさん
22/10/24 03:27:38.59 lrg5VPVy0.net
(;・∀・)1000個やった。。プログラマはすげぇやって思ったけど効率いいやり方あるんか。

940:デフォルトの名無しさん
22/10/24 06:08:08.92 6AUN+j8g0.net
似たような処理ならforでもdoでもいいから1000回ループさせればいいわいな

941:デフォルトの名無しさん
22/10/24 11:49:03.56 iXy6XZlxa.net
動いているなら問題ないと思うよ

942:デフォルトの名無しさん
22/10/24 20:02:23.15 lrg5VPVy0.net
時間できたら改修してみるわ

943:デフォルトの名無しさん
22/10/25 13:18:15.56 dMEmx1y0a.net
問題なく動いているのを変に直してバグ入れる人よくいる

944:デフォルトの名無しさん
22/10/25 14:05:40.72 Awxzqqqu0.net
ん?
俺の悪口やめろよ

945:デフォルトの名無しさん
22/10/25 15:35:28.46 zuyTceYk0.net
wordVBAについて質問したいのですがここでも良いですか?
win10
2019版ですが、ページ番号5のページ全体を選択状態にしたいのですが、ググって見つかったrectangles(1)の手法は2019ではうまくいきません。
解説サイトがExcel VBAに比べてとても少ないので困っています。
ご存知のかたいませんでしょうか?

946:デフォルトの名無しさん
22/10/25 15:37:35.82 rYg1mhKw0.net
>>945
死ねよ

947:デフォルトの名無しさん
22/10/25 15:39:53.50 PC01Ck0J0.net
いや、あんたじゃないよ、おれの悪口だよ

948:955
22/10/25 15:48:40.06 zuyTceYk0.net
URLリンク(www.wordvbalab.com)
ここで解決しました。
ルール違反だったようですみませんでした。

949:デフォルトの名無しさん
22/10/25 17:07:14.74 KrF65cxW0.net
>>948
956が頭おかしいだけだから気にすんな

950:デフォルトの名無しさん
22/10/26 01:53:51.72 cEMR/QGK0.net
今は死ねとか言っちゃいけないんだぞ!

951:デフォルトの名無しさん
22/10/26 11:34:25.48 gGo/2Fws0.net
VBAのスレはこの今に存在するし、Excelって書いてあるのに無視して質問してる
更にはあまりにくだらないないようであるし
この手の連中はつけ上がるからな

952:デフォルトの名無しさん (ワッチョイ 8201-yYWu)
22/10/26 14:36:09.42 xzd5i3vP0.net
なら誘導してやればいいだけだろ

VBAなんでも質問スレ Part3
スレリンク(tech板)

953:デフォルトの名無しさん
22/10/26 19:48:54.22 EO+J62QK0.net
バカは死ななきゃ治らないそうですよ

954:デフォルトの名無しさん
22/10/26 21:41:45.13 Zi5ur2ypM.net
>>953
それは残念でしたね

955:デフォルトの名無しさん
22/10/26 22:17:58.40 izoyFRHN0.net
>>953
あっ・・・

956:デフォルトの名無しさん
22/10/28 13:09:52.87 KYP1+/DId.net
Excel初心者です。
カレンダーから日付入力のアドインをチェックボックスを使って表示・非表示したいのですが可能ですか?
また、スクロールしても画面内の同じ位置に表示し続けることは可能ですか?
できればコードを教えてほしいです(*_ _)

957:デフォルトの名無しさん
22/10/28 16:04:55.62 OMbpfHro0.net
おまいら親切すぎるんだわ
どんだけお人好しなんだ?

958:デフォルトの名無しさん
22/10/28 16:17:16.47 n9kqTWYK0.net
>>957
って思うじゃん?
ここで回答すると、違っていた時やもっといい方法があるときに上乗せして回答される
すっげーいい勉強になるんだぜ

959:デフォルトの名無しさん
22/10/28 18:37:43.76 OMbpfHro0.net
単にマウント取られてるんじゃなくて?

960:デフォルトの名無しさん
22/10/28 19:20:57.49 YuCy5lGNM.net
マウント取られるならむしろ勉強になるだろ

961:デフォルトの名無しさん
22/10/28 19:39:15.46 sCscEEFEd.net
優劣つけたがる奴多いけど
技術的な解決方法の話(こういう方法もあるぞ)だったらマウントいうのはおかしくないか?

962:デフォルトの名無しさん
22/10/28 19:49:26.94 xzhsh84s0.net
質問に対しての回答例ならマウントという表現はおかしいと思うが
その後の雑談は確かにマウントの取り合いに見える

963:デフォルトの名無しさん
22/10/28 20:29:32.46 TnsRe9wR0.net
僕が一番VBAをうまく使えるんだって言いたくなるのはわからなくはない

964:デフォルトの名無しさん
22/10/28 20:42:13.46 xzhsh84s0.net
二位じゃ駄目なんですか

965:デフォルトの名無しさん
22/10/28 21:17:01.84 n9kqTWYK0.net
>>959
頼むからマウント取ってください!
とにかく俺の上のスキルを見せて欲しい。なんでもしますから!
>>961
実際、確実に上って人はいくらでもいるよ

966:デフォルトの名無しさん
22/10/28 21:23:26.29 ZY9+XqOP0.net
お前がぐちゃぐちゃ入ってないで解答教えてやれや
971がやきもきしてるぞ

967:デフォルトの名無しさん
22/10/29 00:12:28.15 LP1UZCi+0.net
>>956
カレンダーアドインは使ったことないんでわからん
カレンダー程度なら自作できるので融通の利かないアドインは好かんのです

968:デフォルトの名無しさん
22/10/29 02:12:02.06 Q43C9b/9M.net
汎用性のある日付入力カレンダーの自作は結構大変だろ
休日祝日の更新処理が面倒で自作はあきらめた

969:デフォルトの名無しさん
22/10/29 07:19:37.14 EvNBvM9mM.net
>>968
最近使ってるが祝日はこれ使うと楽だぞ
URLリンク(excelapi.org)

970:デフォルトの名無しさん
22/10/29 07:56:20.37 y8vo38aP0.net
>>968
> 休日祝日の更新処理が面倒で自作はあきらめた
それ汎用性のある日付入力カレンダーでやることじゃないだろ...

971:デフォルトの名無しさん
22/10/29 09:53:33.94 WkAX7jzB0.net
日数算出するの面倒いよな
うちの会社は祝日が全部休みじゃないし

972:デフォルトの名無しさん
22/10/29 10:12:47.32 S8npcbCXM.net
結局、日付入力はカレンダー形式やめてテキストボックスとスピンボタンで適当に誤魔化した

973:デフォルトの名無しさん
22/10/29 11:10:55.70 zPpzpsf30.net
>>956
アドインでは無くてユーザーフォーム作ってそこにボタン配置してシート上のセル操作ならやったことある
[BttnF] という名のユーザーフォームを呼び出すのに、A1セルにボタン [cmdBttnF] を配置(ウィンドウ枠の固定でA1はずっと表示してるから)
Private Sub cmdBttnF_click()
With BttnF
.StartUpPosition = 0
.Top = 100
.Left = 800
.Show vbModeless
End With
End Sub
これだけで、画面スクロールしてもシート上の同じ位置に居続けるし、もちろんフォーム掴んで動かし回してもいい ×で閉じることもできる
うっかり閉じても、又A1セルにあるボタン押せば表示できるし

974:デフォルトの名無しさん
22/10/29 11:19:55.02 LP1UZCi+0.net
>>956
少しだけ補足すると、質問の文章がきちんと書かれていないので回答しにくい部分があって
EXCELのバージョンとカレンダーアドインについての情報がないので私の環境での説明では質問者のものと異なるかもしれない
アドインの表示/非表示はVisibleとかの表示関係のプロパティーは調べないのか
スクロール範囲は「ウインドウ枠の固定」かユーザーフォームとかが考えられるんじゃね

975:デフォルトの名無しさん
22/10/29 14:34:50.58 zPpzpsf30.net
>>956 「カレンダーから日付入力」のアドインは個人用アドインに取り込まれて
毎回それをダイアログから追加するか貼り付けたまま使い続けるかの使用方法しかない様子
マクロの記録で一連の操作をしても望む動きしないし、ユーザーフォームに貼り付けるとか
コピペとかいろいろ試したけど、どれもできず断念
作者に交渉して「こういう使用方法したい」と改善依頼するしかないような 誰か他の案プリーズ

976:デフォルトの名無しさん
22/10/29 17:02:02.57 pObfyH4Kr.net
初心者あるあるの後だし条件

977:デフォルトの名無しさん
22/10/29 18:34:46.28 XVu26ZuG0.net
質問です。
VBAの処理の途中経過をログのようにコマンドプロンプトに表示させたいのですが、
どうすればよろしいでしょうか?
高速だと尚嬉しいです。

978:デフォルトの名無しさん
22/10/29 19:12:37.96 LP1UZCi+0.net
>>977
表示だけならユーザーフォームにテキストボックス貼り付けるだけでいいんじゃね

979:デフォルトの名無しさん (ワッチョイ 69cd-Tk+f)
22/10/29 22:00:56.05 Ty5cM9IY0.net
>>977
debug.printでイミディエイトウィンドウじゃだめなの?
フロートさせることもできるからわざわざコマンドプロンプトに投げなくてもいいと思う
URLリンク(i.imgur.com)


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

37日前に更新/265 KB
担当:undef