Excel VBA 質問スレ Part79(ワッチョイあり)at TECH
Excel VBA 質問スレ Part79(ワッチョイあり) - 暇つぶし2ch1:デフォルトの名無しさん
23/01/28 12:12:12.41 UjlIZ1Ov0.net
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を3行貼り付けること
ExcelのVBAに関する質問スレ
コード書き込みや作成依頼もOK
次スレは>>980が立てること
無理なら細かく安価指定
※前スレ
Excel VBA 質問スレ Part77
URLリンク(mevius.2ch.net)
Excel VBA 質問スレ Part78
URLリンク(mevius.2ch.net)
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured

2:デフォルトの名無しさん
23/01/28 12:23:13.98 +RlrKkV4M.net
Excel VBA 質問スレ Part79
スレリンク(tech板)

3:デフォルトの名無しさん
23/01/28 12:40:41.67 NqcfPhRT0.net
>>1


4:デフォルトの名無しさん
23/01/28 15:04:00.65 uWWFw1N+a.net
1gj

5:デフォルトの名無しさん
23/01/28 15:34:06.67 YZOoYTJxM.net
わかった気で勘違いしている馬鹿の間違いや馬鹿さ加減を指摘するとスレが荒れるので無視しましょう
最近では零細企業のあれです

6:デフォルトの名無しさん
23/01/28 21:43:50.55 cCrz+GwL0.net
エクセルでスクレイピングはできそうだけどね。

7:デフォルトの名無しさん
23/01/28 22:05:54.66 cCrz+GwL0.net
分かりづらい質問だな。
「エクセルファイルのシートにボタンを置いて、それをクリックしたら
あるアプリを立ち上げたい。これが可能ですか?」
ということかな。答えは可能。

8:デフォルトの名無しさん (ワッチョイ 8379-jh2e)
23/01/29 01:25:58.33 R24XfIrD0.net
>>6
javascriptに丸投げする形だからそっちの知識も必要になるけどね
IE時代はVB単体で完結できたのに面倒な時代になったな!

9:デフォルトの名無しさん (ワッチョイ 9a02-5T4A)
23/01/29 09:15:12.97 KzySl/Bm0.net
httpリクエストとか、api接続とか、一般的な表計算の操作が中心の
エクセルユーザーの範囲外なんだけど。
ただ、ExcelでなくてGoogleスプレッドシートはapi接続に相性が良さそう。
クラウドにアプリがあるっていうのは、それだけ優位な気がする。
会社での表計算もほとんど、ExcelでなくてGoogleスプレッドシート使うようになってきて、
今Excelとして残っているのは、過去開発されたマクロで運用する箇所があるから。
こんなことになるとは数年前には思っていなかった。

10:デフォルトの名無しさん (ワッチョイ 9a02-5T4A)
23/01/29 09:19:56.22 KzySl/Bm0.net
VBAとGASどっちもできるようになるといいね。

11:デフォルトの名無しさん
23/01/29 10:26:38.51 nRF7bUNu0.net
A列セルに3桁のアルファベットと番号(AAA 1000)、B列セルに金額が入っており
A列セルは番号部分が同セル内に/で区切られ増えるパターンあり(AAA 1000/1001/1002)
これを/がある場合は/で区切り、番号ごとに行を追加して
更にB列の金額も追加した行数で分割するといったことを最終行まで繰り返し処理したいのですが
    A列      B列
AAA 1000/1001  1,000
       ↓↓↓
    A列      B列
AAA 1000      500
AAA 1001       500
金額を行数で分割する方法と
番号ごとに行を追加した時にアルファベットAAAを番号前に追加するにはどうすればよいでしょうか。

12:デフォルトの名無しさん
23/01/29 10:28:09.50 nRF7bUNu0.net
続き
コードはこれなのですが
どうかよろしくお願いします
Dim i As Long
Dim n As Long
Dim LastRow As Long
Dim SplCell As String
Dim temp As Variant
Dim AddRow As Long
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = LastRow To 1 Step -1
  SplCell = Cells(i, 1)
  temp = Split(SplCell, "/")
  AddRow = UBound(temp)
 If AddRow > 0 Then
  Range("A" & i + 1).Resize(AddRow).EntireRow.Insert
 End If
 For n = 0 To AddRow
  Cells(i + n, 1) = temp(n)
  Cells(i + n, 2) = Cells(i, 2)
 Next n
Next i
End Sub

13:デフォルトの名無しさん
23/01/29 11:46:37.73 WTXbQyE20.net
>>12
考えてみた。
Sub test()
Dim i As Long
Dim n As Long
Dim LastRow As Long
Dim SplCell(1) As String ←変更。(0)はアルファベットを格納、(1)はアルファベット以降の金額部を格納。
Dim temp As Variant
Dim AddRow As Long
Dim m As Double ←追加。行数で分割した金額。
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = LastRow To 1 Step -1
SplCell(0) = Left(Cells(i, 1), 4) ←追加
SplCell(1) = Mid(Cells(i, 1), 5) ←変更
temp = Split(SplCell(1), "/")
AddRow = UBound(temp)
If AddRow > 0 Then
Range("A" & i + 1).Resize(AddRow).EntireRow.Insert
End If
m = Cells(i, 2) / (AddRow + 1) 追加
For n = 0 To AddRow
Cells(i + n, 1) = SplCell(0) & temp(n) ←変更
Cells(i + n, 2) = m ←変更
Next n
Next i
End Sub

14:デフォルトの名無しさん (ワッチョイ db10-+rQD)
23/01/29 12:05:26.37 nRF7bUNu0.net
>>13
ありがとうございます!!
希望通りに動きました。

助かりました。すごく嬉しいです。

15:デフォルトの名無しさん (オッペケ Sr3b-O9ZV)
23/01/29 14:40:20.12 cIjm/G+Or.net
>>9
It sounds like you are saying that Excel users may not have experience with things like HTTP requests and API connections, but that Google Sheets may be better suited for those types of tasks because it is a cloud-based app. You also mention that your company has been transitioning away from using Excel and towards using Google Sheets for most of their spreadsheet needs, with the exception of some areas where older macros developed in Excel are still in use. It's interesting to see how technology and user preferences can change over time.

16:デフォルトの名無しさん (ワッチョイ 5fda-2biX)
23/01/29 15:11:19.34 GtadNWQm0.net
looks like 〇
sounds like ×

17:デフォルトの名無しさん
23/01/29 15:15:30.68 KzySl/Bm0.net
なんで英訳

18:デフォルトの名無しさん
23/01/29 15:18:51.71 cIjm/G+Or.net
ChatGPT

19:デフォルトの名無しさん
23/01/29 16:52:45.66 wtQ124Fo0.net
こっちも零細企業荒らしがいるのか

20:デフォルトの名無しさん
23/01/29 18:16:29.96 OkpG00lK0.net
クラスモジュールを使っていく勉強しています。
ClassAのプロパティとしてClassB,ClassCから作るオブジェクトを持たせる事で階層型に
整理できるようですが、これも正しいオブジェクト指向の形なのでしょうか?
メインコードからObjA.ObjB.プロパティAみたいに呼び出せるのです。
ObjAは例えば初期値というカテゴリ
ObjBは初期値の中の日付に関連するもの
ObjCは初期値の中の料金に関するもの
ObjA.の時点で候補が出てくるのも便利です。なんだかただの変数みたいに使ってる気もしますが。
そしてJavaでいうところのメソッドの継承ですが、親側ObjAのメソッドと同じ名前のメソッドを子側ObjBに作り、
中身は親側ObjAのメソッドを呼び出すだけとすれば継承と同じ動作をするような気がします。
子側クラス内で親側クラスのインスタンスを作成しているので、循環しているような気持ち悪さはありますが、内部はメインコードからは見えませんし。
オーバーライド?というのも親側ObjA側のメソッドを呼ばずに子側のObjBのメソッドに処理を好きなように書けばいいだけと思いました。
そして関数型にありがちな関連性のない関数群Module1とかもClassMultiにプロパティのないクラスとして書いて、
オブジェクト化すると、マルチに活躍する便利屋みたいな存在として、これもオブジェクト指向な気がしてきました。
しかも先ほどの継承みたいに別のクラスから同名メソッドで呼ばせれば、同じメソッドをクラス毎に書く必要もありません。
メイン側から見るとオブジェクト指向そのものにも思えます。
オブジェクト指向を人間や動物に例えると、とてもわかりづらかったのですが、
ネームタグみたいな説明をしているサイトから、単なる整理整頓の為の思考技術みたいに考えて。
見せかけのオブジェクト指向を目指してみると、本物と大差ない気がしてきているのですが間違っていますか?
このままなんちゃってオブジェクト指向で進むことをお勧めできない理由がありましたら教えてください。
CallByNameとかImplementsとか勉強すればもっと本物に近づくような気がしています。

21:デフォルトの名無しさん
23/01/29 21:58:40.35 TymAj0Je0.net
Excelスレでも荒らしてるヤツがいるなここ

22:デフォルトの名無しさん
23/01/29 23:11:48.83 QtxW6Mg40.net
ワッチョイ付きに誘導されますた。
Type RecClass0
 field01 As String * 6
End Type
Type RecClass1
 field01 As String * 4
 field02 As Integer
End Type
Sub test()
 data = "abcdyyzzzz・・" ← HEXにすると "414243440006??????・・"
 Dim rec0 As RecClass0
 Dim rec1 As RecClass1
 rec0.field01 = data
 rec1 = rec0   ←型が一致しません
 Debug.Print Len(rec1.field02)
End Sub
dateの0006にあたる6を取ってきたいんだけど、上記のようなコードを考えてみた。
型が一致しませんになる。
代入て無理なのか?
コボルだとできるよな。
上のコードはインデントのために全角空白を使ってるので、半角にしてくれ。

23:デフォルトの名無しさん
23/01/29 23:33:48.49 5iJXY4pQ0.net
>>22
LSETじゃダメなのか?

24:デフォルトの名無しさん
23/01/30 03:06:05.93 yj3XWjhj0.net
>>23
できました

25:デフォルトの名無しさん (ワッチョイ 3619-GWjr)
23/01/30 08:01:49.37 1uz9zngm0.net
>>20
> 子側クラス内で親側クラスのインスタンスを作成しているので、循環しているような気持ち悪さはありますが、内部はメインコードからは見えませんし。

堅牢性から考えるとVBAに限らずここがまずいかな
子クラスCで親クラスAを生成すると言う事は、
もし同じような親クラスDを作成して同じ子クラスを
使おうとするとその中で親クラスAを作成することが
前提となってしまい、親クラスDでは使えない場合が出てくる。

子クラスではあくまで子クラスの役割を
与えるべきであって、もし親クラスの機能を
使いたいなら直接子クラスの中で生成するのではなく、
CallByNameやインターフェースを使用するかして
処理を移譲させるようにした方がいいと思うよ。

26:デフォルトの名無しさん (スププ Sdba-5IHC)
23/01/30 09:39:47.20 e2a+Lyz1d.net
CSVファイルって、Excelで開いて編集して保存すると文字コードの問題でデータの後ろに半角スペースが入ることがあるのでしょうか?

27:デフォルトの名無しさん (スププ Sdba-5IHC)
23/01/30 09:40:56.25 e2a+Lyz1d.net
元々半角スペース入ってなかったのにデータをかきかえたりすると文字コードがShiftJISではない場合、文字化けして半角スペースが入るのでしょうか?

28:デフォルトの名無しさん
23/01/30 10:51:56.77 Vha856Nid.net
ここはVBAスレなのでスレチでは?
Excel総合相談所 144
スレリンク(software板)

29:デフォルトの名無しさん
23/01/30 11:54:01.10 beImLHJmr.net
>>26
URLリンク(www.officepro.jp)
これとか?
セルの表示形式の問題?

30:デフォルトの名無しさん (スププ Sdba-5IHC)
23/01/30 15:20:40.00 e2a+Lyz1d.net
>>29
たぶん、それだわ
ありがとう

31:デフォルトの名無しさん
23/01/30 15:57:22.13 dCL8a0ux0.net
>>29
その記事、余白と空白文字(半角スペース)を同一視してるのが気持ち悪いな

32:デフォルトの名無しさん
23/01/30 19:11:31.03 uxYUj7Ria.net
>>31
そうは言ってもExcelだと余白を空けるのに空白しか使えないから仕方なくね?

33:デフォルトの名無しさん
23/01/30 21:40:04.89 dCL8a0ux0.net
>>32
正しい余白ならインデントってのがあるが
CSVにしたらどうせ書式はなくなるのに、書式を空白で表そうとするEXCELが気持ち悪いのか
そのくせインデントは無視するという

34:デフォルトの名無しさん
23/01/30 22:17:38.88 uC26F0Aa0.net
>>33
なるほどインデントは忘れてたわw

35:デフォルトの名無しさん (アウアウウー Sa47-DSsr)
23/01/31 05:21:30.98 JnYo5yDia.net
余白はデータじゃなくて、見た目。
見た目のために、データを変更するのか?

それなら、trim などで、データの先頭末尾の空白類を除去する必要がある

36:デフォルトの名無しさん
23/01/31 12:24:23.88 XEbPQm8Ra.net
余白は木を切る~

37:デフォルトの名無しさん (ワッチョイ 5f10-exzg)
23/01/31 15:00:10.31 bFYKhQ9l0.net
うまい!座布団何枚?

38:20
23/02/01 15:16:25.31 J3cdB8RP0.net
>>25
レス感謝です。
呼び出しだけなので「お父さんやって」的なイメージでした。
>もし同じような親クラスDを作成して同じ子クラスを
>使おうとするとその中で親クラスAを作成することが
>前提となってしまい、親クラスDでは使えない場合が出てくる。
ここがわかりませんでした。
ClsFatherとClsSonの二つがあるとします。
メインでClsFatherから父親シルバを作成、
自動的にClsFatherの中で息子キルアが作成されて父親のプロパティにセットされる
親クラスDにあたる父親ジンをClsFatherから作成して、息子ゴンがを作成される
息子ジンが継承もどきで使う機能は父親ドンのだけのつもりでしたが、
継承って本来は父親シルバ、息子ゴンみたいな組合せも自由に出来るものって意味だから
それじゃ違うよってことですか?
息子ゴンのメソッドでどの親メソッドを継承するかをImprementsとかで動的にしなさいということですか?

39:デフォルトの名無しさん
23/02/01 18:01:33.64 lcTv0p8q0.net
>>38
親が子を生成するのはいいけど、お前の設計では子が親インスタンスを生成するんじゃないのか?
ジンがゴンを生成しても、ゴンの親はゴンがきめるんだぞ

40:38
23/02/01 19:12:55.35 J3cdB8RP0.net
>>39
そうです。子も親のインスタンスを生成します。
当然オブジェクトとしては別物ですが、同じクラスからの生成ですので、
同じ親の機能を使えるという意味です。
実際にゴンはジンを作れず、ジンとほぼ同じ能力を持つ別の何かの力を使って
継承に見せかけるという事です。
この見せかけ行為が本当の意味での親オブジェクトの機能継承にあたらず危ないよって意味でしょうか?
で、本当の意味での親オブジェクトの機能を使うならCallByNameやImprementsを使いなよって意味でしょうか?

41:40
23/02/01 22:04:53.94 J3cdB8RP0.net
すみません。質問途中に別の質問をする事になってしまいます。
自力で解決出来ませんでした。
VBEのCtrl+hボタンで出てくる置換機能で、パターンマッチングを使用するにチェックを入れました。
Ai.Erase
Ai.Create
AiErase
AiCreate
この4つのワードにおいて、パターンマッチングとして
Ai[AE]としたら下の二つにだけマッチングしました。
そしたら一致したAとEは温存しつつAiとA or Eの間にどっとを入れたいのです。
実際はもう少し複雑なパターンなのですが。簡略化するとこんな感じです。
一致したAとEが消えてしまうので困っているのです。
一致した[AE]のどちらかをそのまま残したいと
Ai.[AE]みたいにしても置換後文字列はAi.[AE]がそのまま出てきてしまいます。
思ってるような使い方は出来ないという事でよろしいでしょうか?

42:デフォルトの名無しさん (ワッチョイ 8a3d-0rrK)
23/02/03 01:33:26.18 0K9bvbAh0.net
Sub test_if()
a = -1
If a >= 2 Then
Debug.Print "aは2以上"
Else
Debug.Print "aは2未満"
End If
End Sub

というマクロなんだけど<>を使わずに同じことが可能?
<>はネット上では禁止されてる場合があるので。

43:デフォルトの名無しさん
23/02/03 06:07:59.84 VZIBsXzk0.net
範囲を指定できるのであればCase文でtoを使うとかかな

44:デフォルトの名無しさん
23/02/03 07:22:57.06 3sKN4Loqa.net
>>42
完全に同じかどうかは知らんが
If Application.WorksheetFunction.Min(a, 2) = 2 Then

45:デフォルトの名無しさん
23/02/03 11:32:43.16 bf4OLvi00.net
オートフィルタの或る列が昇順でソートされているかどうか
を判定する方法を教えて下さい。

46:デフォルトの名無しさん
23/02/03 11:36:12.10 bf4OLvi00.net
>>45
昇順か降順かは問わず、ソートされているかどうかでした。

47:デフォルトの名無しさん
23/02/03 19:20:46.12 UC5jDXxN0.net
>>45
自分でソートしたものと比較して同じ順番だったらソートされているといえる

48:デフォルトの名無しさん
23/02/03 19:24:07.79 fZLyE03H0.net
いや待て、どっかのプロパティにフラグがないかを尋ねてるんだと思うぞ
俺は知らないがな

49:デフォルトの名無しさん
23/02/03 20:25:48.41 6Slrjruv0.net
フィルターのボタンに↑↓とか表示されない?抽出とかだとロートの図が出てたり?

50:デフォルトの名無しさん
23/02/04 01:29:18.62 Wbq5qWPo0.net
>>38
そそ、
そういう「どっちの親でも使える」ようにするために
そういう場合は継承は使わずに、移譲でやるのがいいんじゃないかと。
そもそもVBAじゃ厳密な意味の継承は使えないけどね。

51:デフォルトの名無しさん
23/02/04 03:13:48.63 5cp+GCIG0.net
一次元配列の中に二次元配列を入れるのってシートから二次元配列として取り込まない限り無理ですか?
例えばa(2)って一次元配列を作って
a(0)=cells(1,1).currentregion
とした場合、a(0)(1,1)と格納されるよね。
一方、b(2)って一次元配列をつくってそこに2次元配列を格納しようとしてredim b(0)(100,100)って宣言してもエラーになるよね?

52:デフォルトの名無しさん
23/02/04 03:22:13.04 5cp+GCIG0.net
特に複数のcsvを一次元配列ごとに二次元配列として取り込みたかったんたけど、それができなくて困ってます
0.csv→a(0)に二次元配列として格納
1.csv→a(1)に二次元配列として格納
2.csv→a(2)に二次元配列として格納
よくありそうなパターンですけどネットで調べても出てこなくて…
何かいいアイディアはあるでしょうか?

53:デフォルトの名無しさん
23/02/04 06:12:27.84 JIMr/Iwq0.net
>>52
csvを格納するならそのまま格納して取り出すときにsplitで配列化したらどうか。
デリミタ変えてcsvを繋げてあげれば擬似的に2次元配列に出来んじゃね?

54:デフォルトの名無しさん
23/02/04 06:14:50.01 JIMr/Iwq0.net
>>53
あるいはdirectoryのitemに2次元配列としてaddするか

55:デフォルトの名無しさん
23/02/04 06:19:01.21 JIMr/Iwq0.net
>>54
> >>53
>スマン。directoryじゃなくてdictionaryだw

56:デフォルトの名無しさん
23/02/04 08:21:23.33 XHbOUS2x0.net
>>48
その通りです。ネット検索しても出て来ないため、ここで聞いてみてどうかなと思いました。
>>49さん仰るように矢印がボタンに表示されるので、何かあるはずと思ったのです。

57:デフォルトの名無しさん
23/02/04 09:06:33.92 YYLIzwcR0.net
>>45
ググっただけだけど
Worksheet.AutoFilter.Sort.SortFields
あたりを見ればわかるんじゃね?
てかMSのDocsもこの辺りのドキュメントが貧相で困るわ

58:デフォルトの名無しさん
23/02/04 09:14:10.73 xQtdr6Ugd.net
>>45
AIさんからの天の声です
Sub CheckSortOrder()
Dim sortOrder As Boolean
sortOrder = ActiveSheet.AutoFilter.Sort.SortOn
If sortOrder = True Then
MsgBox "The column is sorted in ascending order."
Else
MsgBox "The column is not sorted in ascending order."
End If
End Sub

59:デフォルトの名無しさん (ワッチョイ 8fda-EOzK)
23/02/04 10:59:33.56 mzRI23fF0.net
>>58
だからさ、そのコードが有効かどうかを、先ずはじぶんで検証しろよ ゴミコードだろうと何でも貼りゃあいいってもんじゃねーぞ
△! オブジェクトは、このプロパティまたはメソッドをサポートしていません。だぞ おま環のせいで動作しないだけってか?
検証もしてない野良コードは世間の大迷惑 AIなら間違わないってか? 訊ねる人間側に問題あるからゴミコード吐くのに気付け

60:デフォルトの名無しさん (スプッッ Sddf-D+99)
23/02/04 11:20:43.51 EUGDlgP1d.net
>>59
そのコードを検証することは重要です。そのコードが有効かどうかは、まず自分で確認する必要があります。「AIなら間違わない」という考え方は誤りです。AIモデルはトレーニングデータから学習するだけであり、常に正確ではありません。野良コードを使用しても問題が起こる可能性があり、それが世間を混乱させることがあります。

61:デフォルトの名無しさん (ワッチョイ 4f01-Rev0)
23/02/04 13:12:21.87 sIc7L3oe0.net
>>53
「csvを格納するならそのまま格納して」って言うのが、まさにその方法を知りたいっていう質問でした
Line Inputをつかって一行ずつ一次元配列に分割して、それを二次元配列に格納して、二次元配列の一次元目を増やして…ってのを繰り返すってのを考えました
(二次元配列の一次元目を増やすプロシージャを作成する前提)
ところがredim b(0)(100,100)という宣言自体がエラーになるのでどうしたものかと

62:デフォルトの名無しさん
23/02/04 14:48:40.79 JIMr/Iwq0.net
>>61
お役に立てたのならなによりっす。
でもその内容を聞いた感じだとcollectionかdictionaryを使ったほうがいい気もする。csvがどのくらいの文字数かわからんけど下手するとオーバーフローしそうな気が、、、
あとそもそもファイル操作で読み込むんじゃなくてPowerqueryとかでデータテーブル化してしまえば扱いやすい気も、、、あ、スマンね。いらぬお節介やった。

63:デフォルトの名無しさん
23/02/04 18:22:34.02 Av2vQos/0.net
>>61
そういうのって1次元の配列にCSVから作った2次元配列を足していくジャグ配列だよね
a(b)(c,d)として使いたいってそういう事だよね
CSVから2次元配列に落とす部分は自力で適当に作るしかないと思うよ

64:デフォルトの名無しさん
23/02/04 19:42:17.96 3xAEA7yN0.net
>>52
2次元配列を格納したバリアント型の1次元配列を使えばまあできるんじゃね

65:デフォルトの名無しさん
23/02/04 22:05:52.42 sIc7L3oe0.net
>>62
ジャグ配列はまさにその通りです!
色々調べてみたところ、Workbooks.OpenTextで一度新しいブックを開いて、そこをcurrentregionで二次元配列として取得するのが一番早そうでした
シート一度貼り付けて、そこから取得するのがちょっとかっこ悪い気もしますが、コード的には一番楽のだと思うのでそれでいきたいと思います
ありがとうごさいました!

66:デフォルトの名無しさん
23/02/04 22:07:02.46 sIc7L3oe0.net
>>63
すみません、安価こっちでした
>>62さんも>>64さんもありがとうございました!

67:デフォルトの名無しさん
23/02/05 06:12:14.98 zxOMW0wY0.net
>>65
解決の糸口が見つかってよかったです。
シートに貼り付けるのは一見かっこ悪く見えるかもしれませんが、エクセルの場合シート自体が目視できる2次元配列みたいなものなのでデータ用のシートを用意しておくのはデバッグの意味でも有効と思います。
最終的に非表示にしておけばデータを変えて不具合が出たときに参照できますしね。

68:デフォルトの名無しさん (ワッチョイ cf79-p19T)
23/02/05 17:55:21.75 IrR7f/G90.net
シートに読み込ませてUsedRange.Valueで二次元配列を取得する場合はインデックスが1オリジンになるとこだけ注意

69:デフォルトの名無しさん
23/02/08 13:33:38.06 yPPt1d0+d.net
名前の定義で範囲に名前をつけると数式で使用できますが、
VBAで自作関数を作り、その引数として定義した名前を使用するとエラーとなってしまいます。
一応定義した名前の後に&“”を付けて文字列化すればエラーを回避できるのですが、毎回これを入力するのは煩わしく見栄えも悪いのでできることならなんとかしたいのですが
解決策ありましたらご教示の程お願いいたします。

70:デフォルトの名無しさん
23/02/08 14:59:06.65 oAUh4t2x0.net
その関数のシグネチャとエラーメッセージぐらいかけよ

71:デフォルトの名無しさん (アウアウウー Sa93-4QSx)
23/02/08 15:37:35.62 FTgAG7p2a.net
毎回やるならインターフェース関数作ればいいだけ

72:デフォルトの名無しさん
23/02/08 20:18:25.84 GAx9K2n2d.net
>>69
実現したいことがどんなことなのかわからないけど名前定義した範囲をRange型の変数にsetしてRange型のまま引数として渡しちゃいかんの?

73:デフォルトの名無しさん (スップ Sd5f-dHSc)
23/02/08 23:15:53.95 Gaz3gRVpd.net
言葉でうまく説明できないので画像で説明させていただきます。
例えば引数の文字列に別の文字列をくっつけて返すだけのシンプルな関数を作ります。
当然引数にセルを指定すれば問題なく使用できます。
URLリンク(i.imgur.com)

次に、範囲に名前をつけてそれを引数として使用します。
URLリンク(i.imgur.com)

するとこのように「#VALUE!」エラーが出ます。
URLリンク(i.imgur.com)

ちなみに範囲の名前に&“”をつければ期待通りの結果になります。
URLリンク(i.imgur.com)

と、SS撮ってて気づきましたが範囲の中から同じ行のセルを選んで渡す必要があるのですね。
VLOOKUPの第一引数なんかで同じことをすると自動的に同じ行だけを渡せるので勘違いしていました。

74:デフォルトの名無しさん
23/02/09 07:05:59.22 bJr31kU+0.net
>>73
検証してないので的外れかもしれないけどたぶんRangeのデフォルト値の問題かと。
うろ覚えだけどvariant型で渡されているからセル単体を引数で渡すとセル内容の値の型(今回はstring型)を渡すけど
複数セルを渡すとrange型のオブジェクトとして渡されてるんじゃないかな。
なので自身で書かれているようにセルを特定してあげないといけないのだと思う。

75:デフォルトの名無しさん
23/02/09 23:30:18.42 TUokDGw70.net
>>73
>範囲の名前に&“”をつければ期待通りの結果になります
のがおかしい気がするんだが。実際こっちで検証してもエラーになってる
ちょっと環境書いてみて

76:デフォルトの名無しさん (ワッチョイ fa3d-n4dK)
23/02/13 03:20:36.33 COtuPGR00.net
Sub test()
a = 0.2
b = 0.4
If a + b = 0.6 Then
Debug.Print "A"
Else
Debug.Print "B"
End If
End Sub

これってAじゃね?

77:デフォルトの名無しさん
23/02/13 07:05:23.93 HpzJjAlxd.net
>>76
Excelでは少数を厳密には表現できないから
0.1と書いても実際の値には0.12...みたいなのが入る
そのズレた値同士の足し算をズレた値と比べるからガタガタで合わなくなる

78:デフォルトの名無しさん
23/02/13 07:53:01.46 /kiwbSJJ0.net
>>76
きちんと型宣言すればちゃんと計算できる
詳しくは下を見た方が早い
URLリンク(excel-ubara.com)

79:デフォルトの名無しさん
23/02/13 10:13:40.33 QGUistpWa.net
>>76
ほんとだよく気付いたね って言ってほしいのか?

80:デフォルトの名無しさん
23/02/13 10:18:31.40 86tN/4J60.net
すみません、マクロスレに誘導されてきました。教えてください
【1 OSの種類         .】 Windows**
【2 Excelのバージョン   】 Excel16.0
【3 VBAが使えるか    .】 はい
【4 VBAでの回答の可否】 可
◆やりたいこと
データモデルに値を格納し接続先を作成している
その接続先にあるリストを、検索フォーム、コンボボックスなどのデータソースにしたい
◆補足情報とし調べがついてること
・ピボットテーブルにはビボットテーブル→データモデルからで設定できた
・選択リストもINDIRECT関数で設定できた
・コンボボックスや検索フォームは、RowSourceTypeにテーブルクエリーを設定
・RowSourceプロパティにテーブル名を設定
ここまではわかっていますが、うまく設定ができません
具体的には、下記コードでエラーが出ます
実行時エラー‘13’
型が一致しません
エラーの出たコード
Privets Sub UserForm1 Initialize() {
Me.ComboBox1.RowSourceType = “Table/Query”
Me.ComboBox1.RowSource = “syamei1”
}
上記のコードの書き方、サンプルコードがあれば教えて下さい。よろしくお願いします

81:デフォルトの名無しさん
23/02/13 10:21:58.10 86tN/4J60.net
連投すみません
コンボボックスじゃなくても構いません
やりたいことは大量のデータをもとに入力用のポップアップウインドウを作りたいです
レコードが合計で100万以上あり、重たくなるのを避けるために、データモデルの概念を知り、それで入力フォームを作ろうとしています
その方法でコンボボックスを見つけましたが、元となるデータソースがデータモデルの接続先から選べるなら、コンボボックスの形式じゃなくても構いません
入力規則で選択リストの値を持ってくることはできましたが、レコード件数が多いので、フォームで出したいと思っています
よろしくお願いします

82:デフォルトの名無しさん (アウアウウー Sa4f-qaxQ)
23/02/13 11:40:19.98 GyFZ7uvya.net
Privets ?

83:デフォルトの名無しさん
23/02/13 14:18:20.91 86tN/4J60.net
スマホ手打ちなので誤字は勘弁を

84:デフォルトの名無しさん
23/02/13 17:29:24.70 pezzuKY30.net
スマホで5ちゃん見てる人も多くなったのか

85:デフォルトの名無しさん
23/02/14 11:37:45.99 nNkhowbBa.net
拙者も携帯なので試せないでござるよ

86:デフォルトの名無しさん
23/02/14 13:19:18.08 YTnfnco6a.net
現場で使えるテクニック満載のVBAの本を教えて下さい。

87:デフォルトの名無しさん
23/02/14 22:18:21.54 h0+uN4JM0.net
見てどうする?
現場に活かせるとは限らんぞ

88:デフォルトの名無しさん (ワッチョイ aff9-UHi0)
23/02/15 09:38:23.37 dWAC20qI0.net
syamei1ってテーブルを指定してるようだけど
ちゃんとテーブルが存在してるの?
RowSourceでクエリやsql指定してみたら?

89:デフォルトの名無しさん (ワッチョイ deda-D0vN)
23/02/15 19:02:02.67 8XlBz3tg0.net
>>87
活かせる現場に転職するんじゃね

90:デフォルトの名無しさん (ワッチョイ c619-xn9B)
23/02/15 19:27:38.40 HlAv3bv30.net
ネットが見れない環境なんかね?
銀行系ではよくある話だけど

91:デフォルトの名無しさん (ワッチョイ 0710-hSWQ)
23/02/15 19:39:09.60 UoMCmZrt0.net
絆創膏テクニック的な本はたくさん出ているでしょ

92:デフォルトの名無しさん
23/02/15 20:32:13.82 8XlBz3tg0.net
銀行でお金の計算を初心者が本見ながらEXCELのVBAで作ってるとか
そんな銀行やばくね

93:デフォルトの名無しさん
23/02/16 02:33:56.63 v5+0ZrcQ0.net
ヤバいよそれは。
思い出したけど、どこかの銀行がATMの不具合出した事故を思い出したわ。
それと同じようなトラブルになるのでは?

94:デフォルトの名無しさん
23/02/16 14:14:15.80 TeVuhO500.net
Excel 365なんだが
ActiveXのコンボボックスをシートに配置すると
ブックを閉じるときにコンボボックスのChangeイベントが発生して
Changeイベントのコードが実行されるんだが、なんで閉じるときに発生するん?
バグじゃねーの?

95:デフォルトの名無しさん
23/02/16 17:40:38.79 ImcZX1+Nd.net
アクティブXコントロールでボタン作ると、ボタン押した時にボタン内の文字が左に寄るのですが、これは治せるのでしょうか?

96:デフォルトの名無しさん
23/02/16 17:44:23.49 IvN11mYG0.net
ActiveXオブジェクトは、自分(Application)のオブジェクトに見えても、実は外部のオブジェクトです
Application イベントの扱いで記述不足や漏れが無いか、プロパティの見直しなどしてみるかコードを貼ってみるなり

97:デフォルトの名無しさん (ワッチョイ 0710-hSWQ)
23/02/16 20:35:33.62 v5+0ZrcQ0.net
ActiveXってExcelで使わない方が良いみたいな記事(日経PC)で見た記憶ある

98:デフォルトの名無しさん
23/02/17 07:12:43.98 WORa0xXL0.net
ActiveXはExcelシートで使うもんじゃないってのは今でも定石!

99:デフォルトの名無しさん
23/02/17 10:04:33.80 o2LVTB4Vd.net
URLリンク(answers.microsoft.com)の-activex/81aa0b17-2f60-49c3-83f7-02c164969f7c
Excel2016のバグなんですね

100:デフォルトの名無しさん
23/02/17 10:05:10.85 o2LVTB4Vd.net
URLリンク(answers.microsoft.com)の-activex/81aa0b17-2f60-49c3-83f7-02c164969f7c

101:デフォルトの名無しさん
23/02/17 10:15:37.69 znCeXLfL0.net
そんな古いVer使い続けるなよ スタンドアロンで一台こっきりならまだしも

102:デフォルトの名無しさん
23/02/17 15:42:35.67 WFsPqw+S0.net
検索で例えば「あ」という文字をすべて探し出して
その一文字前を選択したいんですがどうすればいいですか?
Selection.Find
 .Text = "あ"
 Selection.Words.First.Previous.Select
としてみましたがうまく行きませんでした
カーソルのある前の文字が選択されます

103:デフォルトの名無しさん
23/02/17 16:30:19.83 KwkbTkoud.net
>>102
複数の選択ができると思ってんのか?

104:デフォルトの名無しさん
23/02/17 17:31:12.72 WFsPqw+S0.net
>>103
できないんですね…VBA触ったの今日が初めてなもので
最終的には"あ"の一文字前だけをフォント変更したいんですがどういう実装ならできそうか分かりませんか?

105:デフォルトの名無しさん
23/02/17 20:35:48.06 clT0gqvf0.net
>>104
自分なら検索して見つかったセル毎に
「あ」が何文字目にあるかを取得し、
その1文字前のフォントを変更するというふうに組む。

106:デフォルトの名無しさん (ワッチョイ 4600-XLfl)
23/02/17 20:59:53.94 WFsPqw+S0.net
>>105
ありがとうございます
けど"あ"が複数あるセルも多いので…複数回走査したらループ終わらなくなりますし
"あ"は目印として入れてあるだけで最後にまとめて消すつもりだったんですが
一回フォント変更の処理したらそこの"あ"を消しても�


107:、一度検索がいいんでしょうか…



108:デフォルトの名無しさん
23/02/17 22:23:30.64 v2XGnFXnd.net
>>106
Mid( Range.value, x)で
セル内のx文字目から後ろを切り出せる
Instr( Mid( Range.value, x), z)で
セル内のx文字目から切り出した中で文字列zが何文字目にくるのか知ることができる
Range.characters(x, y).Fontで
セル内のx文字目からy文字分みたいな一部指定でのフォント変更が出来る
これらのxやyをForで変更しながら処理すればいけると思う

109:デフォルトの名無しさん (ワッチョイ 4600-XLfl)
23/02/17 22:57:47.99 WFsPqw+S0.net
>>107
あああなるほどなるほど
仰ってる意味はギリわかるんですけどコードいじるのほぼ10年ぶりとかなんでハードル高い~~~
どうにかがんばってみます……
ありがとうございました

110:デフォルトの名無しさん
23/02/18 11:21:39.71 wyxXLbRL0.net
>>108
コードを書いてみた。
所定のフォントを変えた後、最後にまとめて「あ」を空白に置換させている。
Sub findあ()
 Dim foundcell As Range, firstcell As Range, target As Range, Num As Long, flag As Boolean
 Set foundcell = Cells.find(What:="あ")
 If foundcell Is Nothing Then Exit Sub
  Set firstcell = foundcell:Set target = foundcell
  Do
   Num = InStr(foundcell, "あ")
   If Num > 1 Then
    flag = False
Do
If flag = False Then Num = 0
Num = InStr(Num + 1, foundcell, "あ")
If Num = 0 Then Exit Do
foundcell.Characters(Start:=Num - 1, Length:=1).Font.Name = "BIZ UDゴシック":flag = True
Loop
End If
Set target = Union(target, foundcell)
Set foundcell = Cells.FindNext(foundcell)
Loop Until foundcell.Address = firstcell.Address
target.Replace What:="あ", Replacement:=""
End Sub

111:109
23/02/18 11:39:38.68 wyxXLbRL0.net
途中で書き込んでしまったので
もし使うならインデント調整して下さい

112:デフォルトの名無しさん
23/02/18 18:22:51.48 oiEmQBhiM.net
>>109-110
ご親切にありがとうございます!!
有り難く使わせていただきます

113:デフォルトの名無しさん
23/02/19 13:44:33.87 E1njzG6f0.net
次のようにA列にid番号、B列に削除されるid番号あります。
A,B
1,3
2,5
3,7
4,
5,
6,
7,
8,
9,
C列にAからBの番号を除外したものが残ります。
C,
1
2
4
8
9
これを実現するのに、みなさんならセル関数を使いますか?VBAを使いますか?

114:デフォルトの名無しさん
23/02/19 14:09:46.37 fQjaN3Vg0.net
バージョンは

115:デフォルトの名無しさん
23/02/19 14:50:51.24 E1njzG6f0.net
ver2019です。

116:デフォルトの名無しさん (ワッチョイ 2342-rjXQ)
23/02/19 15:46:46.73 IrwBul5G0.net
手動も含めて一番都合がいいのを使う

117:デフォルトの名無しさん
23/02/19 16:33:34.29 E1njzG6f0.net
ありがとうございます。慣れないですがVBAで行うことにしました。

118:デフォルトの名無しさん
23/02/19 16:36:15.42 E1njzG6f0.net
以下の実行が通りません。
If init_id(i) = del_id(j) Then
の個所でインデックスの範囲外というエラーがでました。
配列に対して添字を()しているのが問題でしょうか?
Sub 次の問題()
Dim totalQuestions As Long, pastQuestions As Long, Nextnum As Long, n As Long
Dim init_id() As Variant, del_id() As Variant
totalQuestions = Worksheets("Play").Cells(Rows.Count, 1).End(xlUp).Row - 1
Randomize
Nextnum = Int(totalQuestions * Rnd + 1)
n = Worksheets("arrData").Cells(Rows.Count, "B").End(xlUp).Row + 1
Worksheets("arrData").Cells(n, "B") = Nextnum
init_id = Worksheets("Play").Range(Worksheets("Play").Cells(2, 1), Worksheets("Play").Cells(totalQuestions + 1, 1)).Value
pastQuestions = Worksheets("arrData").Cells(Rows.Count, 2).End(xlUp).Row - 1
del_id = Worksheets("arrData").Range(Worksheets("arrData").Cells(2, 2), Worksheets("arrData").Cells(pastQuestions + 1, 2)).Value
Dim i As Integer,


119:j As Integer For i = 1 To totalQuestions For j = 1 To pastQuestions If init_id(i) = del_id(j) Then Debug.Print init_id(i).Value End If Next j Next i End Sub



120:デフォルトの名無しさん
23/02/19 16:40:27.54 E1njzG6f0.net
念のため、chatGTPはあてにならなかったです。

121:デフォルトの名無しさん (ワッチョイ 4bda-BTrK)
23/02/19 17:24:19.98 ZehIwlnC0.net
>>117
Integerだからだろ

122:デフォルトの名無しさん (ワッチョイ 2302-3nnD)
23/02/19 17:30:57.52 E1njzG6f0.net
ありがとうございます。Longにしてもダメでした。
根本的に配列の扱いが間違っているような感じですが、
それがよくわかりません。

123:デフォルトの名無しさん (ワッチョイ 1501-rVJW)
23/02/19 17:39:18.41 j3UrUaev0.net
>>120
init_id = Worksheets("Play").Range(Worksheets("Play").Cells(2, 1), Worksheets("Play").Cells(totalQuestions + 1, 1)).Value

del_id = Worksheets("arrData").Range(Worksheets("arrData").Cells(2, 2), Worksheets("arrData").Cells(pastQuestions + 1, 2)).Value
でinit_idとdel_idにセルの値を配列として代入しているけど、これは2次元配列として代入している
だからinit_id(i)という一次元配列は存在しない
init_id(1,1)とかinit_id(2,1)の二次元配列として存在している
よってinit_id(i)は存在しませんってエラーが出てる
ローカルウインドで確認するといい

124:デフォルトの名無しさん
23/02/19 17:44:28.85 E1njzG6f0.net
ありがとうございました。よくわかりました。
なんとか1次元の配列を作りたいと思います。
セルデータから簡単に配列つくれるということでこの作り方になったのですが。
列番号を1つにすれば1次になるかと浅はかでした。。

125:デフォルトの名無しさん
23/02/19 18:07:25.25 xzOvW7kvd.net
配列よりDictionaryの存在チェックで判定する方が簡単そうだけどなぁ

126:デフォルトの名無しさん
23/02/19 18:17:57.66 FtkTxk830.net
>>112
VBAならこんな感じか。
後、C列に6がないのは記入漏れ?
Sub C列に書く()
Dim i As Long, cnt As Long, dRange As Range
Set dRange = Range("B1:B3")
cnt = 1
For i = 1 To 9
If WorksheetFunction.CountIf(dRange, Cells(i, 1)) = 0 Then
Cells(cnt, 3) = Cells(i, 1)
cnt = cnt + 1
End If
Next i
End Sub

127:デフォルトの名無しさん
23/02/19 18:24:49.89 E1njzG6f0.net
>>124
ありがとうございます。やろうとしていたコードよりシンプルです。

128:デフォルトの名無しさん
23/02/19 18:28:42.83 E1njzG6f0.net
>>124でおしえていただいた方法で進めたいのですが。
これで、エラーがでたのはなぜでしょう?
Sub 次の問題()
Dim totalQuestions As Long, pastQuestions As Long, Nextnum As Long, n As Long
Dim init_id() As Variant, del_id() As Variant
totalQuestions = Worksheets("Play").Cells(Rows.Count, 1).End(xlUp).Row - 1
Randomize
Nextnum = Int(totalQuestions * Rnd + 1)
n = Worksheets("arrData").Cells(Rows.Count, "B").End(xlUp).Row + 1
Worksheets("arrData").Cells(n, "B") = Nextnum
pastQuestions = Worksheets("arrData").Cells(Rows.Count, 2).End(xlUp).Row - 1
Dim i As Integer
For i = 1 To totalQuestions
init_id(i) = Worksheets("Play").Cells(i+1, 1)
Next i
For i = 1 To pastQuestions
del_id(i) = Worksheets("Play").Cells(i+1, 1)
Next i
End Sub

129:デフォルトの名無しさん
23/02/19 20:06:54.10 owAZbnPUd.net
春休みか?

130:デフォルトの名無しさん
23/02/19 20:22:10.83 j3UrUaev0.net
これ流石に釣りだろ
いつものキチガイ臭がすごいわ

131:デフォルトの名無しさん
23/02/20 01:12:29.14 CLcJ/prP0.net
また荒らしか。

132:デフォルトの名無しさん
23/02/25 22:54:00.85 IaGdb0E30.net
VBA初心者です
退職済みの前任者が作ったマクロで多発してるエラー対応をしています
Dim 範囲 As Range
Set 範囲 = Worksheets(″Sheet1″).Range(″A1″).CurrentRegion
・変数に日本語を使うメリットとデメリット
・Range型の変数を使うメリットとデメリット
教えてもらえないでしょうか?

133:デフォルトの名無しさん
23/02/25 23:47:26.72 tG3tii0/d.net
>>130
お前のレベルで手を出すな

134:デフォルトの名無しさん
23/02/25 23:51:02.20 apv923pv0.net
聞いたこともない英単語だとかえってわからなくなるからいっそ日本語の方がいい時がある(語学力の問題)

135:デフォルトの名無しさん
23/02/26 00:31:12.73 /hhgnOlt0.net
>>130
前任者がつくったとかいうのは関係なく、エラーを直して正常に動くようにするのは今の担当者の仕事じゃね
日本語を問題にするなら好きな言葉に置き換えればいいだろう

136:デフォルトの名無しさん
23/02/26 05:08:45.75 eudL/KWJ0.net
昔は確かに日本語変数だと変な挙動起きたがな。

137:デフォルトの名無しさん
23/02/26 10:08:54.14 B6f81u3Mr.net
日本語のメリット
人によっては視覚的に分かりやすい
デメリット
その度に切り替えボタンを押すのが面倒
後任者が分かりやすいように日本語にしといてくれたんだろう

138:デフォルトの名無しさん
23/02/26 10:54:07.84 /hhgnOlt0.net
値1 と 値1 が混ざって変数宣言を省略してるとか
漢字の間違いや全角の空白が紛れてたこともあったな昔のことだが

139:デフォルトの名無しさん
23/02/26 12:24:12.13 nvWXChWd0.net
ついこの間、ExcelのupdateでまたVBAが壊れたので
変数はもちろん、ワークシートから引っ張ってくるシート名や定義名も
日本語は止めた。

140:デフォルトの名無しさん
23/02/26 12:27:06.36 pTLOSYzf0.net
Excelって非アクティブからクリックでアクティブにするとき、クリックしたセルが一発でアクティブにならんのな
前回操作時のセルがアクティブなる
デュアルモニターでマウス行ったり来たりしてExcel入力してるから面倒くさいったりゃありゃしない
スプレッドシートは問題ないんだけどさ
スレチだったらすまん

141:デフォルトの名無しさん
23/02/26 13:44:06.75 2K5zmO2D0.net
非アクティブのウィンドウにマウスをもっていったら自動的にアクティブになる
無料のユーティリティソフトを入れたらいいんじゃね

142:デフォルトの名無しさん
23/02/26 14:26:11.23 pTLOSYzf0.net
>>139
Windowsにその機能あるんだが、普段の使用で使いにくいんだよな
意図しないウィンドウがアクティブになってりして
とりあえずスプレッドシートのほう使うよにしたわ

143:デフォルトの名無しさん (ワッチョイ da79-Arif)
23/02/26 20:33:51.43 gahU4Yv80.net
効率を語るならまずマウス操作を止めるべきだな

144:デフォルトの名無しさん (オッペケ Sr75-WNy4)
23/02/26 21:30:42.93 IOZzQyLPr.net
流石にエクセルのセルをクリックで操作は意味不明だろ
そこに文句言うヤツとか誰も想定してないと思うわ

145:デフォルトの名無しさん (ワッチョイ 9d5f-kDor)
23/02/26 21:41:09.74 pTLOSYzf0.net
いや、デュアルモニターの隣りの画面でFXのチャートの値幅をマウス操作で計測し、その値を隣の画面のExcelに打ち込んでデータ分析してるんだが……
一回入力するたびに隣の画面にポインタ移動するから、そのたびExcelが非アクティブになるんだよ
なんか俺めんどくさいことしてるのかな……?
まあ、これ以上はスレチになるからここで終わりにしておく
すまんかった

146:デフォルトの名無しさん (ワッチョイ 5a02-ZYAP)
23/02/26 22:07:07.64 6/0OFtJ50.net
これじゃダメかい?
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
 Sh.Selection.Active
End Sub

147:デフォルトの名無しさん (ワッチョイ 9d5f-kDor)
23/02/26 23:34:16.33 pTLOSYzf0.net
>>144
うまくできんかった。
chatGPTでもマクロを教えてもらったが、そっちも機能せず
もしかしたらオマカンかもしれん
だからスプレッドシート使うことにした
わざわざすまんかった
ありがとう

148:デフォルトの名無しさん (オッペケ Sr75-WNy4)
23/02/27 01:12:31.98 ykCEF1qar.net
ん?よくわからんけど、vba起動したら別のソフトがアクティブになるってこと?
別のソフトをアクティブにする前にに次に使いたいセルをSelectかActivateにしとけばいいんでない?
そもそもセルに手打ちってのもよくわからんけど

149:デフォルトの名無しさん
23/02/27 20:02:31.12 Akgqa2X30.net
>>138
エクセルのアクティブ化とアクティブセルの変更を1クリックでやりたいって話だろ
デュアルモニターとか関係ない
Activate系のイベントでマウスカーソルの位置拾ってセル位置判定してアクティブ化するマクロを書けばできる気はする
マウスカーソルの位置ひらうのがVBAだけで出来なかった気がするから面倒だな

150:デフォルトの名無しさん (スプッッ Sdfa-XBvd)
23/02/27 23:06:45.60 oBF60fgLd.net
そもそもFX側のプログラムから
記録用CSVなりに追記する形で出力にすればいいのでは
目的と手段を混同しているように見える

151:デフォルトの名無しさん
23/02/28 10:02:05.35 7Eonwnxx0.net
FX側はきっと既成のソフトウェアで手を入れられられず出力機能もないのだろう。
でなければマウスで幅を計測なんて、Excel抜きでも面倒な事をしてないと思う。
FX側ソフトウェアに要望を出す、別のものに変更する、または特注するのは有りだと思う。

152:デフォルトの名無しさん
23/02/28 12:23:19.77 nICQ8lOdr.net
B行に日付 C行以降は各項目
2023/4/3 パン 150
2023/4/16 米 500
2023/5/20 サラダ 230

2023/8/13 牛乳 150
などと表があるとこから、VBAでinputboxで何月を取り出したいですか?など質問をして、その月だけを別シートに抽出したいのですが…findを使う?
どうすればいいのか教えて頂きたいです。

153:デフォルトの名無しさん
23/02/28 12:42:03.99 O8AX5fZ9d.net
>>149
そいつがやるべきはVBAじゃなくFXソフトのお勉強からだな
少なくともメタトレーダー系ならExcelに対するVBAのようなプログラム制作用機能が充実してるから値幅計測ぐらいわけない

154:デフォルトの名無しさん
23/02/28 15:14:30.22 kIDllaukr.net
>>150
どうればいいのかって…
VBAでinputboxで何月を取り出したいですか?など質問をして、その月だけを別シートに抽出してくださいってしか言えんだろ
具体的にコード出さないと何も言えない

155:デフォルトの名無しさん
23/02/28 15:55:23.62 d2Gt5PsA0.net BE:439992976-PLT(15000)
URLリンク(img.5ch.net)
VBAでやるよりピボットテーブルの方が・・・

156:150
23/02/28 15:57:37.64 nICQ8lOdr.net
AutoFilterやCurrentRegion.copyで何とかなりました。
すみませんでした。

157:デフォルトの名無しさん
23/02/28 17:32:55.16 O8AX5fZ9d.net
もしかして:For
まあ他人と共用するマクロなんだろうし
その他人の中にマクロのことを聞けるやつもいないんだろうから
手作業をマクロで書いただけみたいなので正解かもしれんな

158:デフォルトの名無しさん
23/03/02 03:38:03.48 wSjrNglr0.net
他人と共用するマクロは、共用している他人がマクロを編集できるので
自分がどう作っても他人が勝手に修正するだろうし・・・

159:デフォルトの名無しさん
23/03/02 06:52:29.36 J6gUWTNI0.net
>>156
事前に許可なく編集禁止と伝えておくのはどうでしょうか??
自分の職場はトラブル防止のため注意喚起を徹底してます。

160:デフォルトの名無しさん
23/03/02 14:19:36.36 wSjrNglr0.net
マクロを作った人間の責任とサーバー上のファイルを管理している管理者
業務としてマクロを使う作業を指示している上司に変更内容を確認してもらう必要があるよね

161:デフォルトの名無しさん
23/03/04 13:39:41.40 hC7IXlBmd.net
>>132,134-137
遅くなったけど130です
ありがとう
自分には日本語の変数のほうがわかりづらいし、>>137の言うように万が一にも備えて英語に置き換えることにした

162:デフォルトの名無しさん (ワッチョイ 7b66-QeO8)
23/03/05 14:08:33.99 SCRVkcxh0.net
Public Sub aiueo()
Dim Ary(2) As Variant
Ary(0) = 10
Ary(1) = "文字列"
Ary(2) = CDate("2021/2/2")
Dim test As Variant
test = Ary
Call aiueo2(test)
Call aiueo3(Ary())
End Sub
Public Sub aiueo2(ByRef Ary As Variant)
MsgBox TypeName(Ary)
End Sub
Public Sub aiueo3(ByRef Ary() As Variant)
MsgBox TypeName(Ary())
End Sub

関数への配列をどう渡すかで悩んでいます。
配列として渡すのか、Variant型のスカラー変数にして渡すのか。

VBAのVariant変数は配列さえも入るスカラー変数だと認識しています。
なので、配列そのものを入れてるだけで、Variant型の配列変数とは少し違うと思っていました。
しかし上記の結果は同じでした。そうなってくると
ど�


163:チちでもいいということなのでしょうか? もう一つ気付いたのはaiueo3はByVal渡しが出来ないけど、aiueo2ではByVal渡しが出来るので、 大元の配列の中身をいじらないで済むという違いがわかりました。 他に違いはありますか?



164:デフォルトの名無しさん (ワッチョイ 1379-rvSK)
23/03/05 15:00:07.80 RB9OOifa0.net
>>160
Variantの配列は結局Variantだから下のように配列指定の括弧を取って関数宣言すれば値渡しもできるよ
Public Sub aiueo3(ByVal Ary As Variant)
関数引数の宣言で配列を受けるように書いてしまうと参照渡ししかできなくなるってだけ

165:デフォルトの名無しさん
23/03/05 19:01:06.89 ePQGVH9T0.net
>>160
そんなサンプルばっかり作ってないでちゃんと役に立つもの作ればいいのに

166:160
23/03/05 19:19:12.03 SCRVkcxh0.net
>>161
ありがとうごございました。
スカラーで受けるか配列で受けるかにこだわっていました。
あれからもう一つ気付けたのは
Public Sub Sample(Byref Ary() as Class1)
Public Sub Sample(Byref Ary as Class1)
この時に大きな違いが出ました。前者はAry(i).と書くだけでClass1のプロパティメソッド一覧がサジェストしてくれますが、
後者だとVBE的には配列と認識してないのでサジェストしてくれません。
これを決定打として前者の書き方に統一しようと思います。
>>162
8割出来てたソフトをクラスを導入して書き直したら拡張しやすいコードに生まれ変わると信じてトライ中です。
月に数日しか触る時間が取れなくてちっとも進んでないです。
久しぶりに触ると自分が書いたコードさえ複雑すぎて読めないです。

167:デフォルトの名無しさん
23/03/05 22:22:28.42 dhvwtz5Oa.net
長くなれば長くなるほど自分のコードってイミフに見えるよね。特に3ヶ月経てば。

168:デフォルトの名無しさん
23/03/06 00:54:11.13 ai8Q1Y+e0.net
なにをしてるかしらんけど、クラスを配列にして関数に渡してる段階で
ちょっと設計見直したほうが良いと思うぞ

169:デフォルトの名無しさん
23/03/06 00:59:15.55 1WgjQ7Bk0.net
なぜそういったコードが産まれるか?
前任者がそういったやり方をしていたから。

170:160
23/03/06 01:52:26.46 PqTDPu/H0.net
>>165
そうなのですか?
クラスを配列にしているというよりは、配列の中にクラスのインスタンスが入ってるという事なのですが。
例えばA組には生徒が100人います
生徒の遺伝子情報を持つ精子がそれぞれ1億匹います
しかもそれが毎日吐き出されます。
もちろん日別にそのインスタンスは微妙に違います。
まさにそれが配列の中にクラスのインスタンスがある状態かと思ってました。
とても理にかなった行為に思えます。
配列の中にクラスのインスタンスを入れる事は。
クラスはあくまでも階層図なのではないでしょうか。
配列を横の広がりとするなら、クラスは入れ子をする事で深さを表すと思い込んでいます。
5次元配列とかイメージも出来なくてわからないのですが、クラスの入れ子で5層を作るのは案外わかりやすいです。

171:デフォルトの名無しさん
23/03/06 03:53:47.03 GSPsPwm3M.net
クラスの配列なら横への広がりのイメージだな
クラスの深さなら継承の概念が必要
本格的なオブジェクト指向言語なら普通に使われるけどなんちゃってオブジェクト指向のVBAでは記述できない

172:デフォルトの名無しさん
23/03/06 07:22:39.83 AsR8H3/e0.net
クラス使うと一挙に視野が広がるよ
ついでを言うと配列の代わりに
コレクションやディクショナリを
使うことも視野に入れるといいと思うよ

173:デフォルトの名無しさん
23/03/06 12:27:06.93 b2hOsO6/0.net
VBAもオブジェクト指向できるんか

174:デフォルトの名無しさん
23/03/06 12:41:06.98 xFg+nzlgM.net
プロパティ、メソッドなどの概念はオブジェクト指向からの由来
ただし本格的なクラスベースでもプロトタイプベースでもない独自体系の(中途半端な)オブジェクト指向

175:デフォルトの名無しさん
23/03/06 13:36:46.14 diWxUEyJa.net
あえて言えば
フォーム指向だな

176:デフォルトの名無しさん
23/03/06 14:45:16.86 9+J+ARGqM.net
敢えて言うならフォーム指向というよりコンポーネント指向
excel(Application)、book、worksheetなどすべてのオブジェクトはCOMコンポーネント
フォームもCOMコンポーネントの中のひとつ

177:デフォルトの名無しさん
23/03/06 14:57:08.93 qrIfb0I6M.net
>>170
C言語だってできるわ
データ(構造体)とそれを操作する関数を作っていくだけだ

178:デフォルトの名無しさん
23/03/06 15:12:57.72 ai8Q1Y+e0.net
>>167
たとえばエクセルブックは複数のワークシートをもってるが、それを配列で管理したりしてないだろ
まあ、VBAはコレクション系が弱いので配列で実装することもままあるがな
>>174
ここで言うオブジェクト指向できるかどうかってのは、
言語側にそのサポート機能がどのくらいあるかって話なんだと思わないかね?
太古のBASICはもとより、VisualBasicも出始めはオブジェクト指向を意識したものではなかったからな
互換性を残しつつオブジェクト指向を取り入れたのでかなり中途半端な出来なのはまあしょうがない

179:デフォルトの名無しさん
23/03/06 15:22:06.82 g0HnCWe20.net
リストやマップだって内部では配列使ってるでしょ

180:デフォルトの名無しさん
23/03/06 16:30:36.14 diWxUEyJa.net
VBAは糞だから廃止しても良いけど
代替がC#じゃなくてPythonになりかけたのは笑う

181:デフォルトの名無しさん
23/03/06 18:31:47.09 1WgjQ7Bk0.net
そういえば結局MSはVBAを完全に廃止はしないんだっけ??

182:デフォルトの名無しさん
23/03/06 18:36:58.90 dmixHrui0.net
廃止はされないだろうけど棲み分けされる方向性にある
Office スクリプトと VBA マクロの違い
URLリンク(learn.microsoft.com)

183:デフォルトの名無しさん
23/03/06 18:42:11.32 AsR8H3/e0.net
VBAのクラスは中途半端と言えばまぁそうだけど
VB.Net、おいてはC#とかをやる際の
練習には・・・いや、ちょっと厳しいか
でもObject指向言語いきなり入ると
継承ばっかに目が行って
移譲が疎かになったりするから
まぁいいんじゃないかな

184:デフォルトの名無しさん
23/03/06 21:16:37.56 1WgjQ7Bk0.net
やっぱ昔ながらのVBAがいちばんしっくりくるわ。

185:デフォルトの名無しさん
23/03/07 21:48:06.79 3iqfWDhi0.net
やっぱ昔ながらのBBAがいちばんしっくりくるよね

186:デフォルトの名無しさん
23/03/07 23:24:56.52 Rx98WF270.net
いや、BBAは55までが限界だわ。

187:デフォルトの名無しさん
23/03/09 18:56:56.85 P+HJFtzc0.net
ところでBBAの手前の年齢なら何て呼ぶ?

188:デフォルトの名無しさん
23/03/10 03:06:29.10 iWPdLzMM0.net
>>184
おばさま

189:デフォルトの名無しさん
23/03/10 12:22:39.19 bedhQt/D0.net
ちなみにお前らは おじさんやおっさん って呼ばれてもおかしくない年齢だよな?

190:デフォルトの名無しさん
23/03/10 13:34:04.07 p0hGObdpM.net
ExcelとVBAを使って商品の在庫管理をしようと考えています。
1つの商品の販売数は概ね1~10程度に収まっていますが、たまにそれを超える数が出る事があります。
入力を簡単にするため10個以下のときはドロップダウンリストから選択し、それ以上の時は直接入力で
対応しようと思ったのですが、コンボボックスでは直接入力した値を取得できません。
直接入力とドロップダウンの両方で値を取得出来る方法はありませんか?

191:デフォルトの名無しさん
23/03/10 16:23:53.92 fVzcNxhh0.net
フォームコントロールのコンボボックスだとプロパティに無いから出来ない
もし、セルの[データの入力規則]でもいいなら、エラーメッセージタブの □ 無効なデータが入力・・・
のチェックを外せば、リスト外の文字列(数値含む)も入れられる

192:デフォルトの名無しさん
23/03/10 16:24:00.66 vz26ACYYd.net
そんなもん使い難いだけだわ
UIを良く考えよう

193:デフォルトの名無しさん
23/03/10 16:26:19.41 uJ3azY/w0.net
正直1桁ならコンボボックスより直接入力のほうが効率いいと思うが

194:デフォルトの名無しさん
23/03/10 16:56:09.67 fVzcNxhh0.net
日付も商品もマウスで選択するようなUIなら理解できる
マウスから手を放したくない みたいな

195:デフォルトの名無しさん
23/03/10 17:10:02.40 Q4TOUEdVM.net
>>187
自分なら基本テキストボックスで直接入力
ただマウスで操作したい要望に対してはボックス横にスピンボタンを追加することで対処する
初期値を1、増減分も1にしておけば1桁程度の値ならコンボボックスと大して変わらないと思う

196:デフォルトの名無しさん
23/03/10 19:08:43.64 q/TVliTR0.net
回答:無理、諦めろ。で満場一致

197:デフォルトの名無しさん
23/03/10 20:38:33.64 iWPdLzMM0.net
回答2:何でそんな事やりたいのだろう…

198:187
23/03/10 23:47:02.61 Qa3px4vn0.net
今時PCが殆ど使えない、新しい事覚えようとしないオバさんに使わせるのでなるべくキーボード入力をしないよう、パッと見で簡単に見えるように作りたいのです。
本来ならこのオバさんクビにして新しい子雇うのが早いと思うのですが…
ありがとうございました。もう一度UI考え直してみます。

199:デフォルトの名無しさん
23/03/11 00:19:36.43 Khcebysn0.net
数字くらい入力できるだろう

200:デフォルトの名無しさん
23/03/11 00:27:12.35 dLGlL2PJd.net
質問者も頭が悪い
わからない人になぜ標準と異なるインターフェースを使わせようとするのか
こういう人が現場に混乱をもたらす

201:デフォルトの名無しさん
23/03/11 02:08:47.98 WLmR0Ocq0.net
わざわざ個数をドロップダウンリストから選ぶとか面倒くさすぎるだろ
規則入力で制限して直接入力させろよ

202:デフォルトの名無しさん
23/03/11 04:45:31.59 ZWvVNp1O0.net
回答3:何でそんな事やらしてるのだろうか、

203:デフォルトの名無しさん
23/03/11 12:35:58.60 QVD3K1L30.net
いや、昨今のWebアプリ(というかWeb入力)画面は、そういうの多く成ってるぞ
和暦、年、月、日、数量なんかもそのたんびドロップダウンしてスクロールしてクリック
一月一日生まれならスクロール不要だけど、十二月三十一日生まれだと毎回面倒臭い とか
おぢさんおばさんのUIと「新しい人」向けのUIも変わって来るんだろう、たぶん
社会に出た時にそういうUIが当たり前 なんてぇ連中にとっては「何で?」の疑問符も湧かないんだろ
タッチパネルUIがメインに成ってくと、やむを得ないとかなのか知らんけど(工夫が足りないだけ?)

204:デフォルトの名無しさん
23/03/11 13:08:52.71 M3BsWLaP0.net
左にラジオボタン用意して
●10以下 [ ドロップダウンで数を選択 ]
○直接入力 [ テキストボックス直接入力 ]
みたいにしたらどうかな。
直接入力したければできるようにどれが最適かわからなければ手段を複数開放しとけば許されるかも

205:デフォルトの名無しさん
23/03/11 13:20:16.65 QVD3K1L30.net
そういう小手先のお節介機能が、後々鬱陶しくなって属人化と揶揄されて忌避されてく元
シンプルイズベストに徹してみるのも、使い続けるためには必要 なのかも

206:デフォルトの名無しさん
23/03/11 14:59:28.59 ifuXB3L30.net
UIだけじゃなくて入力デバイスのことも考える必要があるって話だな
ところで入力させるのはどこなんだよ?
シートなら>>188で解決だから、シートに入力させればいいんじゃねえか

207:デフォルトの名無しさん
23/03/11 15:12:26.79 ifuXB3L30.net
>>187-188
ちょっと気になって試したが
Private Sub UserForm_Initialize()
Dim i
For i = 0 To 10
ComboBox1.AddItem (i)
Next
End Sub
Private Sub CommandButton1_Click()
MsgBox ComboBox1.Value
End Sub
普通にできるじゃねえかよ

208:デフォルトの名無しさん
23/03/11 20:57:24.16 ZWvVNp1O0.net
あらまw
なんだったんだここ2~3日のやりとりはw

209:デフォルトの名無しさん
23/03/12 11:03:12.50 cLh0uqXM0.net
初心者がよく確認しないで先走っただけのこと

210:デフォルトの名無しさん
23/03/14 22:17:45.06 XoNyGxquM.net
URLリンク(my.au.com)
のようなサイトにおいて、ボタンのid属性などが不明の場合、
どのようにすれば
objIE.document.getElementById(“nav-search-submit-text”).Click
のようにクリック処理が記述できるのでしょうか?

211:デフォルトの名無しさん
23/03/15 00:41:25.72 1KS7hC690.net
他のgetElementなんちゃらを使えばいいんでねーの?

212:デフォルトの名無しさん
23/03/15 01:44:42.30 gRjLR93x0.net
>>207
まずhtmlソース全部見る
タグとかクラス名とかinnerHTMLとか、そこを一意に識別する方法を考える

213:デフォルトの名無しさん
23/03/15 19:59:06.05 kKwjf9a5M.net
>>208,209
ありがとうございます。

214:デフォルトの名無しさん
23/03/22 19:26:33.26 K2J+yUPS0.net
VBAをやらざるを得なくなってしまい、半月ほど初心者向けサイトをざっと見したんだけど、復習しながら練習するのにいいサイトとかないですかね??YouTubeとかでもいいです。

215:デフォルトの名無しさん
23/03/22 20:16:54.25 imBU3GyRa.net
教えてもらうくせに上から目線でサイト探しているの?

216:デフォルトの名無しさん
23/03/22 20:27:03.12 dusedFZ60.net
え?どこが上から目線?
全然普通の態度だと思うが。

217:デフォルトの名無しさん
23/03/22 20:35:07.68 7ng/morp0.net
できないと言う勇気

218:デフォルトの名無しさん
23/03/22 21:02:59.43 jPt3JN/N0.net
VBA やりたい事でググれば大抵出てくるOffice田中のサイトでいいんじゃないの

219:デフォルトの名無しさん (オッペケ Sr9d-QeQu)
23/03/22 21:57:37.59 PR1CLsM8r.net
俺も別段上から目線だとは思わんな
vba100本ノックでググればいいよ

220:デフォルトの名無しさん (ワッチョイ 138f-DNU4)
23/03/22 23:19:15.71 K2J+yUPS0.net
>>215
>>216
ありがとうございます。

221:デフォルトの名無しさん (アウアウウー Sa95-XfdO)
23/03/22 23:32:19.46 7f9FP/voa.net
半年探していいサイトが無かったように聞こえたな

222:デフォルトの名無しさん (アウアウウー Sa95-XfdO)
23/03/22 23:32:43.87 7f9FP/voa.net
半月だ

223:デフォルトの名無しさん (ワッチョイ d910-KPRk)
23/03/23 00:54:29.33 RkaYGDJV0.net
ここ最近は神髄というサイトが人気あるらしいね。
例の老舗さんはネタ切れ感あるとか??

224:デフォルトの名無しさん (ワッチョイ 6bda-F0re)
23/03/23 03:04:12.23 0YnebeJA0.net
いいサイトが見つからないから勉強ができないって言い訳はするなよ

225:デフォルトの名無しさん
23/03/23 08:19:59.99 rqWr880TM.net
いうほどいいサイトってなくね?
コード書く練習したいなら100本ノックくらいしか思いつかんわ。
サラッと目通しただけじゃ難易度高いだろうが

226:デフォルトの名無しさん
23/03/23 09:53:16.93 B+OiUivh0.net
その都度ググればよくね?
俺はそうしてる

227:デフォルトの名無しさん
23/03/23 11:11:45.25 8DIiCOGWM.net
ChatGPTに聞きまくり+ネットのコピペまくりでごまかしてるわ
コメントつけて何とか弄れるようにはしてあるけど
無駄だったり重複する処理を消したりはしない、というか下手に出来ない

228:デフォルトの名無しさん (スプッッ Sd73-LK7t)
23/03/23 12:55:45.78 c5DGLB5Nd.net
>>224
こんなのが作ったVBAを使わされる方がかわいそう

229:デフォルトの名無しさん
23/03/23 13:23:54.81 0YnebeJA0.net
不具合が起きてもコピペだから原因がわからず自分が作ってないから直せませんとか言うのが見えてる

230:デフォルトの名無しさん
23/03/23 16:13:34.30 RkaYGDJV0.net
今注目してるのはOffice 春だな。
なかなか痒いところに手が届く技を紹介してくれている。

231:デフォルトの名無しさん
23/03/23 18:42:46.38 0YnebeJA0.net
興味を持つのは自由だが専用スレでやれよ

232:デフォルトの名無しさん
23/03/25 17:09:50.33 zf3m1D9l0.net
恐ろしいぐらいめんどくさかったけど複雑な処理をするマクロが完成して改善の部門賞で去年3万貰えたけどそれを超えるマクロが完成しそう
こりゃ社長賞狙えるかな

233:デフォルトの名無しさん
23/03/25 17:16:33.67 JIVU3ZWvd.net
典型的な頭の弱い社畜の書き込み
井の中の蛙

234:デフォルトの名無しさん
23/03/25 17:20:16.80 zf3m1D9l0.net
だよな、ここの人らって本当に井の中の蛙だわ
異動してpythonに移行する前に作り上げて10万かっさらうわ

235:デフォルトの名無しさん (ワッチョイ 8619-+msU)
23/03/25 20:39:39.60 1snJqDno0.net
まぁEXCEL VBAはEXCEL扱うのはめっぽう強いし
ちょこっとした処理を作るのに長けているから
プログラマ主体でなくて業務側についてる人でも多く使っているからね。

他の言語使っててもUTとかの際に
エビデンス取るとき整合確認とかで
EXCELの数式やVBA知ってると
かなり時間短縮出来たりするし。

236:デフォルトの名無しさん (ワッチョイ e510-XAhC)
23/03/26 02:18:50.58 Vzczu/7L0.net
ちょっとした処理に適しているのがExcelマクロだい。

237:デフォルトの名無しさん (ワッチョイ e95f-ghT9)
23/03/26 21:50:17.38 XuHk6gkC0.net
VBAはネットに転がってるのがいいよね

238:デフォルトの名無しさん (ワッチョイ e510-XAhC)
23/03/26 22:54:45.65 Vzczu/7L0.net
VBA基地外が転がってる

239:デフォルトの名無しさん (アウアウエー Sa7f-PvZ5)
23/04/01 10:04:12.82 UPkZGiTza.net
VBAでゼビウス作りたいです

240:デフォルトの名無しさん (ワッチョイ ffda-kVuH)
23/04/01 10:41:21.61 Fre5vyIa0.net
まず許可とらないと

241:デフォルトの名無しさん (ワッチョイ ffda-kVuH)
23/04/01 19:42:02.16 Fre5vyIa0.net
URLリンク(xtech.nikkei.com)
もう15年も前の記事だが

242:デフォルトの名無しさん (ワッチョイ df05-RaML)
23/04/04 05:43:03.68 gM2C6lf70.net
Excelの罫線が太すぎるので
ある範囲の入力済セルの下に
例えば0.5ptのオートシェイプを引きたいです
どのようにしたらできますか?

243:デフォルトの名無しさん (ワッチョイ ffda-kVuH)
23/04/04 11:13:58.48 H3UIOgUM0.net
入力済セルの下にオートシェイプの線を貼り付ける
線の書式の幅を 0.5pt にする

244:デフォルトの名無しさん
23/04/04 16:48:55.55 gM2C6lf70.net
>>240
VBAで自動でやりたいです

245:デフォルトの名無しさん
23/04/04 17:42:01.18 7A3Dl4jZd.net
ほんとにオートシェイプでやるの?
あら手の嫌がらせかな

246:デフォルトの名無しさん
23/04/04 19:06:27.39 gM2C6lf70.net
>>242
どうしても細い線が引きたいけどないのでそうするしかないんです

247:デフォルトの名無しさん
23/04/04 19:29:11.09 S7HWOC1cd.net
>>243
ダイアログの「なし」の下の破線が一番細い実線だよ
0.5ptって訳じゃないけどこれで代用はできない?
URLリンク(i.imgur.com)

248:デフォルトの名無しさん
23/04/04 19:40:07.41 CrO9FoIt0.net
やりたければやればいい
何がわからないのかわからない
丸投げしたいなら初めからそう言っとけ

249:デフォルトの名無しさん
23/04/04 19:57:30.78 renXLxQ5r.net
流石に何も調べず「こうしたいんです」って言われてもね
調べた上で質問しろよ流石に

250:デフォルトの名無しさん
23/04/04 19:57:38.37 gM2C6lf70.net
>>244
プリンタの問題なのかその破線だと印刷されません
ブラザーのモノクロレーザーなんですが
色々と調べたところインクジェットだと滲むから印字されるけどレーザーだと細すぎて印刷できないみたいです

251:デフォルトの名無しさん
23/04/04 20:11:18.91 5YvJO7dSd.net
>>247
レーザーでも印刷はできる
プリント解像度が合ってないから変えて試せ
要件としてはプリンターで細い罫線を出力したいが正しいのに、
情報小出しにするのはなぜ?

252:デフォルトの名無しさん
23/04/04 20:27:01.14 6BEiQs1Sd.net
馬鹿は馬鹿な頭で馬鹿な方法を考えついて馬鹿な質問をする法則
例の零細企業の馬鹿でわかったはずだろ?

253:デフォルトの名無しさん
23/04/04 21:06:09.03 gM2C6lf70.net
>>248
考えた結果、オートシェイプで線を引くしかない、となったのでそれのやり方を聞きました
ブラザーのサポートにも問い合わせたけどそういうものみたいです

254:デフォルトの名無しさん
23/04/04 22:10:24.26 gM2C6lf70.net
ちなみに点線は印刷業界でいうヘアラインというやつでプリンタの一番細い線を出すという命令なので
いいプリンタほどほぼ印字されないそうです
なので設定は無関係です
300dpiにすれば印字されますが文字が汚いです
印刷のアドバイスを聞きたいわけでも情報を後出ししているわけでもなく、
オートシェイプで線を引くコードが知りたかっただけです

255:デフォルトの名無しさん
23/04/04 22:16:45.73 KVvIoDM70.net
絶対に自分で調べたほうが早いし楽だし拡張性あるのに、頑なに人に聞くやつっているよな
ggrks

256:デフォルトの名無しさん
23/04/04 22:33:10.85 zXZGFdaS0.net
Sub Macro1()
Dim rr As Range
Set rr = Selection
rr.Parent.Shapes.AddLine(rr.Left, rr.Top + rr.Height, rr.Left + rr.Width, rr.Top + rr.Height).Select
With Selection.ShapeRange.Line
.Weight = 1
.ForeColor.RGB = RGB(0, 0, 0) '255,255,153 薄いイエロー 204,255,255 薄いブルー
End With
rr.Select
End Sub
Sub Macro2()
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlHairline 'xlThin
.ColorIndex = xlAutomatic
End With
End Sub
Macro1が直線を引く場合 Macro2が罫線を引く場合 Weight = 1を0.5にしても変わらない xlHairline細線xlThin極細
直線を引くと消す作業が必要に成る

257:デフォルトの名無しさん
23/04/04 22:57:58.66 H3UIOgUM0.net
下線を付ける場合って普通はアンダーライン機能使うし、空欄の下線なら___ (シフト+「ろ」)
~~~~~~~~~~ (半角波線) ^^^^^^ (ハット) で上行の強調みたいな書き方したり
─── (罫線文字) ━━━ (罫線文字太い)  でたいていは済むと思うが

258:デフォルトの名無しさん
23/04/04 23:21:59.65 gM2C6lf70.net
下線というのはセル毎の仕切り線という意味でした
わかりにくくてすみません

259:デフォルトの名無しさん
23/04/04 23:30:14.47 khpg5U9yM.net
>>249
馬鹿は馬鹿な質間の後に後出し条件を付けるも追加で

260:デフォルトの名無しさん
23/04/05 00:53:07.23 ab4hIo8m0.net
>>256
別に全然後出しとは思ってないけどね
細い線が出したいです、ではなくて
自動でオートシェイプで線を書く方法を教えてください、なんだから

261:デフォルトの名無しさん
23/04/05 00:54:17.99 ab4hIo8m0.net
ろくなやついないみたいだからよそいくね

262:デフォルトの名無しさん
23/04/05 01:00:51.04 XcJibMPkM.net
何が問題なのかわからない馬鹿ばっかのところが見つかるといいね

263:デフォルトの名無しさん
23/04/05 01:20:39.85 Yfsd/RuOd.net
知恵遅れ袋があるじゃないか

264:デフォルトの名無しさん (ワッチョイ 7f42-novi)
23/04/05 07:58:24.80 nt1BQkgU0.net
>>257
それは自分が思う解決方法であって目的は細い線を印刷することだろ

265:デフォルトの名無しさん (スッップ Sd9f-YxMi)
23/04/05 08:35:05.20 xBlgsSX7d.net
罫線文化は日本特有だからそろそろ辞めよう

266:デフォルトの名無しさん (ワッチョイ ffda-kVuH)
23/04/05 11:17:22.11 hwWjK5am0.net
そういい続けてもう何年になるだろうか

267:デフォルトの名無しさん (ワッチョイ dfda-icd+)
23/04/05 11:34:30.61 Pachb7xx0.net
>>258
オイオイw 提示したコード試したンか?w オートシェイプの線と罫線と両方をサンプルして
尚且つ、線種や色を改良しやすいように例示もしたってのに 
出力できる太さに限界があるなら色を変えることで改善させるのもひとつの解決策だろうに

268:デフォルトの名無しさん (スプッッ Sd9f-j25d)
23/04/05 14:48:49.66 RBswHKfYd.net
>>264
そういうまともな発想が通じない自分の馬鹿な解決方法とやらに拘るのが馬鹿の馬鹿たる所以だ、残念なことに

269:デフォルトの名無しさん (ブーイモ MM83-KLNd)
23/04/05 19:37:02.68 /dmeuB+9M.net
どこが日本特有だよ
タイやら中国やらアメリカやらからデータ来るけど罫線なんて普通に使いまくりだぞ
文化じゃねーよ無職知ったかかよ

270:デフォルトの名無しさん (ワッチョイ c5da-Rzwh)
23/04/09 10:12:35.57 RxxIHycr0.net
さて、そろそろ書けますか?

271:デフォルトの名無しさん (ワッチョイ c5da-Rzwh)
23/04/09 10:34:21.92 RxxIHycr0.net
うおおw またどっかに吸い込まれたw なにがイカン?
 URLリンク(www.post.japanpost.jp) 日本郵便のサンプル
 URLリンク(learn.microsoft.com)
 URLリンク(templates.invoicehome.com)
各国のインボイス画像何枚か貼り付けたレスだが、取り敢えずアタマ削って書き込んでみるw

現地の駐在員が日本人の可能性もあるぞ と書きたかったw それらの国でもイージーな書式でも通用するから
敢えて日本向けに罫線書式で送り付けてきてる可能性だってある 何かに憑り付かれたように「これでなきゃだめ」
なのは、使う側が融通効かない石頭揃いなせいが大 容易に使えてそれを容認するような文化 が無い(劣ってる)とは言える

272:デフォルトの名無しさん
23/04/09 12:18:38.23 xFg640up0.net
部署で唯一VBA使える人が異動しそうなので
なにか力になりたいけれども、マイクロソフトのVBAスタンダードの
勉強をするよりはその人のコードを見て調べて…の方が良いでしょうか。
資格は実務に役立たないとよく聞くので。

273:デフォルトの名無しさん
23/04/09 12:44:54.33 IMhUrj1Nd.net
>>269
VBAスタンダードなんかのVBAエキスパート資格とMicrosoftは無関係
だからVBAスタンダードより異動する前にコード見て、聞けるところを聞いておく方が有意義

274:デフォルトの名無しさん
23/04/09 12:49:57.62 I9Qf3W7D0.net
何も知らないやつが仕事で力になりたいけどとか簡単に言っちゃいけないよ
他人のVBAコードは不条理の塊と見なせるから、担当が自分に振られたのでなければ下手に関わらない方がいい
異動なら連絡は付くだろうし、君が心配しなくとも引継ぎ担当が面倒見てくれるよ

275:デフォルトの名無しさん
23/04/09 12:59:51.78 xFg640up0.net
>>270 >>271
ありがとうございます。よく分かりました。
ちなみに引き継ぎを受ける候補は私なので
自分でもコツコツ勉強プラス異動後も聞くことにします。

276:デフォルトの名無しさん
23/04/09 13:03:59.67 fQMTK17W0.net
こっそりYouTubeで解説動画見て、簡単なの自分で作って、実務のVBA眺めて意味を考えてググって分からなかったらここで聞いて勉強してからじゃない?
最初は使い方だけ聞けばいいし、中身変更なんて頻繁にないでしょ。

277:デフォルトの名無しさん
23/04/09 17:34:38.52 VccS8NQy0.net
>>268
交互色もよくみる

278:デフォルトの名無しさん
23/04/09 18:28:02.92 SycmVm660.net
>>280
Listobject使うと自動で交互色テーブルになるんですが他国言語版はならんのか?

279:デフォルトの名無しさん (アウアウウー Sa05-MV9R)
23/04/09 21:15:17.28 /EJLPp0Da.net
おちつけ

280:デフォルトの名無しさん (ワッチョイ c619-5xw/)
23/04/11 06:32:54.99 2FEVzV7Z0.net
>>269
VBAの試験なんて
適当にVBA組んでれば
その内何も勉強しなくても
エキスパートいきなり受けても受かる試験だから
そん時受ければいいよ。

EXCELの試験の方が難しいらしい

281:デフォルトの名無しさん (ワッチョイ c510-CGoK)
23/04/11 10:56:35.96 muoUIQjV0.net
日商表計算1級は自慢してもいいレベルらしい。
mosは…察し。

282:デフォルトの名無しさん
23/04/15 17:32:15.76 m9DY7U8S0.net
エクセルのチェックボックスにチェック入れたら、特定のセルに文字を入力する方法を教えてください
↓みたいにチェック入れたり外したりしたら、セルB2に入る文字を変えたいです
URLリンク(jsfiddle.net)

283:デフォルトの名無しさん
23/04/15 17:39:31.98 iq3ZlEDB0.net
セル チェックボックス 連動
で沢山出てくるよ

284:デフォルトの名無しさん (スプープ Sdea-/HYv)
23/04/22 08:24:42.08 Ir4lduVSd.net
A列の「作業結果」ごとに振り分けたいんだけど良い方法ない?
ピポッド組んだ方がはやいかな?

A列     B列
作業結果 氏名
不備なし 田中
不備あり 佐藤
不備なし 佐々木
不備あり 加藤

↓別シートに転記したい

A列
不備なし

田中
佐々木

不備あり

佐藤
加藤

285:デフォルトの名無しさん (スプープ Sdea-/HYv)
23/04/22 08:27:50.42 Ir4lduVSd.net
フィルタかけて 「不備なし」、「不備あり」ごとに転記

作業結果  氏名
不備なし 田中
不備なし 佐々木

不備あり 佐藤
不備あり 加藤

「作業結果」列で重複データのみを削除
Sheets("Sheet2").Range("A1").CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlYes

作業結果  氏名
不備なし 田中
     佐々木

不備あり 佐藤
     加藤

ここまではイメージしたのだけれど、
そもそもとして、A列の属性ごとにまとめたいから、上記ではうまくいかないような…

286:デフォルトの名無しさん (スプープ Sdea-/HYv)
23/04/22 08:29:37.58 Ir4lduVSd.net
氏名はありきたりなのを使用したので大丈夫かとw

287:デフォルトの名無しさん (ワッチョイ 7d32-RykB)
23/04/22 08:31:58.26 EkSMf2Yw0.net
あかん不倫ありに見えた・・・

288:デフォルトの名無しさん (スプープ Sdea-/HYv)
23/04/22 08:52:52.45 Ir4lduVSd.net
自己解決

ピボット組んだ方が説明しやすいような気がした

289:デフォルトの名無しさん (ワッチョイ 7d32-RykB)
23/04/22 08:56:33.28 EkSMf2Yw0.net
今月に入って勉強し始めたわいはフォームからの操作で使ってるけど、
ある結果に該当するデータを For ~ Next と If ~ Elseでふりわけてコピーしてる。

290:デフォルトの名無しさん (ワッチョイ eaea-cSV1)
23/04/22 09:16:50.26 0F5tuW810.net
>>281
Excel2019以後や365版ならVBAでなくワークシート関数のFilter関数使った方が楽かと。
こんな感じ。
=FILTER(B:B,A:A=“不備なし”)

291:デフォルトの名無しさん (スプープ Sdea-/HYv)
23/04/22 09:43:24.98 Ir4lduVSd.net
>>287
これいけそうだね。

毎日集計ださなければならないんだけど、
日付で絞るのは楽勝だとして、

不備なし
不備あり

ごとにFILTERかければいいんだね。
なるべく誰でも分かるものにしろ、
とのお達しなので来週ためしてみるよ。
どうもありがとう。

292:デフォルトの名無しさん
23/04/24 16:29:17.11 51aj6gGh0.net
Excelのシートにpdfを貼り付けたいんですが(一枚目だけでいい)
OLEObjecps.Add
でファイルパスを与えて取り込むと
文字が読みづらいレベルで
解像度が低く取り込まれてしまいます
簡単なプレビューをエクセル上でしたいだけで
pdfのパスが入ってるセルを選択したら
シート上に表示、といったことがやってます
別のファイルを選択したら前のプレビューは消して次のファイルをプレビューする、みたいな
Acrobat Readerはインストされてますが
無料環境でやりたいです。

293:デフォルトの名無しさん
23/04/24 16:37:38.75 nUpPvlxcd.net
>>289
Windowsも有料だし、電気代も掛かるし無料は無理でしょ
他は現状報告だけで答える部分はありませんね
質問やり直せ

294:デフォルトの名無しさん
23/04/25 10:02:17.63 OOi8qz2x0.net
>>289
 >解像度が低く取り込まれる が、把握しずらかったが
URLリンク(www.microsoft.com)
  ↑の、【PDF がぼやけて表示される際の原因と対策】が合致するのか

295:デフォルトの名無しさん
23/04/25 11:27:26.34 Y1VsObgtd.net
pdfを画像として印刷して
その画像を取り込めばいいと思う

296:デフォルトの名無しさん
23/04/25 12:49:16.15 S+8jDJ380.net
>>291
ありがとうございます
設定試してみましたが、症状はかわりませんでした…
>>292
一応考えはしましたが、面倒で躊躇していました…

pdfを取り込むという方針でばかり検索していたので見つかりませんでしたが
webbrowserに表示するという手に逃げることにしました
フォームのModalをオフにしてサイズを可変にすれば
シート上のオブジェクトと似たような操作性にはなるので
これで行こうと思います

297:デフォルトの名無しさん
23/04/25 12:56:36.27 P6aAftcz0.net
なぜReaderに表示させるではだめなのか

298:デフォルトの名無しさん (ワッチョイ 11da-/HYv)
23/04/25 13:26:27.30 OOi8qz2x0.net
そこはほら、ファイルパスを指定して読み込む という部分で察するに
表示されたPDFに関連した他の情報もSheet上にいろいろあれこれ連動して表示されるとか
そういうつくりに成ってるのかも知れない デュアルモニタでも無いんで目が散るとかも
pngやjpgとかの画像ならオブジェクト扱いで拡大縮小すれば何とか処置できるかも知らんけど
PDF固有の問題とかなんだろ

299:デフォルトの名無しさん (アウアウウー Sa21-9dEq)
23/04/25 14:59:34.57 OylHipqda.net
>>294
すいません
pdfだけじゃなくて
普通の画像もユーザーに同じUIで操作させたいのと
普通のReaderはファイルを連続で開くと
タブで複数開こうとするので諦めました…
新しいファイルを開いたら
新しいインスタンス作らず開き直してくれれば近い動作になるんですが

あと、AlwaysTopにする必要もありますし
余計に大変だと考えていませんでした

>>295さんの内容でだいたい正解です

300:デフォルトの名無しさん (ワッチョイ ea79-lTfL)
23/04/25 22:10:00.33 RtJhGNCC0.net
1 PDFをAdobeReaderで開く
2 AdobeReaderにCtrl+Lを送ってフルスクリーンにする
3 画面キャプチャする
4 クリップボードの画像をシートに貼り付ける
5 AdobeReaderを閉じる
何が面倒なんだこれ

301:デフォルトの名無しさん (ワッチョイ ea2f-FGqy)
23/04/26 17:36:17.42 gCvQh4su0.net
1回だけならいいかもしれんが、毎日何回もやるとなったら
面倒だと思わんほうがどうかしてる

302:デフォルトの名無しさん (ワッチョイ ea79-lTfL)
23/04/26 21:05:50.62 zbbRZmOB0.net
VBAスレで何言ってんだコイツ

303:デフォルトの名無しさん (ワッチョイ c55f-6css)
23/04/26 22:50:11.08 hkryowTT0.net
まぁwebbrowserで済むなら
そっちのほうが良いだろね
readerのインスタンス閉じたり開いたりしなくていいし
いちいち画像スクショのフローも通す必要ないし
処理もパスを渡すだけで済むし
なんだったら複数ページでもスクロール確認できるし

304:デフォルトの名無しさん (ワッチョイ b710-tJUV)
23/05/03 21:37:40.68 u6AyBhT90.net
数値が指数表示されるのどうやって直しますか
format で@にすれば直るって言う人いるけど末尾にE15とか付いちゃう

305:デフォルトの名無しさん (スップ Sdbf-v/6/)
23/05/03 22:23:40.94 sgDEJw+Jd.net
>>301
馬鹿は消えろ

306:デフォルトの名無しさん (ワッチョイ 7759-gUqw)
23/05/04 03:04:51.18 0+hX2o4p0.net
表示形式変えたら良くね?

307:デフォルトの名無しさん (ワッチョイ b7da-pJvN)
23/05/04 07:02:56.52 OlPgSuVa0.net
>>301
随分前に取り込んだcsv内のデータが指数表示になって困ったことがある。
セルの書式設定が標準だと12桁以上の数値は自動的に指数表示になるexcelの仕様らしいので書式設定を数値にするか、頭にアポストロフィをつけて文字列として入れたかのどちらかで対応した記憶。

308:デフォルトの名無しさん (ワッチョイ 77da-fitb)
23/05/04 09:06:13.63 c0G0c79m0.net
csvの取り込みはVBAから直接ではなく、
PowerQueryにした。
エンコードや読込み列数の指定もできる。

309:デフォルトの名無しさん (ワッチョイ 7710-Q4KC)
23/05/04 17:35:17.84 SG8oVDU20.net
分からないから質問しているのに馬鹿だの何だのって。

310:デフォルトの名無しさん (スプープ Sd3f-SRD8)
23/05/04 18:18:33.10 KWp7766Yd.net
>>306
馬鹿でNGしておくといい
質問スレによくいる罵るだけ罵って自身は何もしない無能な奴だよ

311:デフォルトの名無しさん (スップ Sdbf-v/6/)
23/05/04 19:48:22.72 pc2Dfs+qd.net
>>307
よく読んでいないのに決めつける馬鹿
お前らにはわからない時には時々答えているぞ

312:デフォルトの名無しさん (ワッチョイ 7710-Q4KC)
23/05/04 20:21:25.82 SG8oVDU20.net
おいおい、NGワードての初めて使ったがあぼーんだらけだぞ??
いかにここがNGワードだらけか分かったよ。

313:デフォルトの名無しさん (ワッチョイ d6da-KeI6)
23/05/10 02:58:03.13 ixnOuziw0.net
なにアホぬかしてんねん

314:デフォルトの名無しさん (ワッチョイ cb10-9aD/)
23/05/10 20:53:06.79 cJ3FIEe20.net
あぼーん

315:デフォルトの名無しさん (ワッチョイ d6da-KeI6)
23/05/11 22:30:54.17 tQtEMv7I0.net
あかーん

316:デフォルトの名無しさん (ワッチョイ cb10-9aD/)
23/05/12 22:05:56.53 dIt5+Jxy0.net
おぼーん

317:デフォルトの名無しさん (ワッチョイ cfda-ZkZz)
23/05/13 19:38:24.33 E3uC06QM0.net
こぼーん

318:デフォルトの名無しさん
23/05/15 07:09:01.65 Rm921WLC0.net
会社のシステム(黒バックに緑の字)で“数字→Ent”で画面表示を切り替えて行くんだけど、どうしてもSendkeyでEnt(テンキー側)が押せない。(それ以外は押せている)
NumLockの問題では無いと思うんだけど、何が問題なんだろう?
“{ENTER}”でも“~”でもダメでした。
どうもメインキー側のEntを押している感じがする。(Entはそれぞれ別の機能か割り振られている)
Sendkeyで無理なら他の方法ってない?
ちなみにVBAは独学でやっている初心者なので、お手柔らかに。

319:デフォルトの名無しさん (スプープ Sd1f-kDbr)
23/05/15 07:44:39.36 S3yoUkobd.net
大きいEnterとテンキーのEnterはキーコードが違う
テンキー側は{ENTER}
sendkeysで{PRTSC}やっても画面キャプチャ撮れないのと同じようなものかも
AutoHotKeyみたいなツール使った方が簡単かもよ

320:デフォルトの名無しさん (ワッチョイ a32d-Q5z4)
23/05/15 08:33:02.84 Rm921WLC0.net
>>316
いや、返信が早いのはありがたいんだけど、エンターキーが別なのは分かってるから、テンキー側か押せないと書いてるワケなんだけど…。
会社のパソコンだから、勝手に別アプリは入れられない。


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