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


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

Excel VBA 質問スレ Part70



1 名前:デフォルトの名無しさん mailto:sage [2021/03/18(木) 22:08:43.71 ID:jtngtgXU0.net]
!extend:checked:vvvvv:1000:512
↑同じ内容を2行貼り付けるナリ

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

※前スレ
Excel VBA 質問スレ Part69
https://mevius.5ch.net/test/read.cgi/tech/1607786543/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured

755 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 17:03:41.13 ID:6tENHryO0.net]
>>729
VB6の開発プロジェクトやってたけど
どのソースコードでもdimもwithもdo untilも当然のように使ってたぞ
お前が使わないってだけじゃないの?
あとOption Explicitつけないのはバグの原因になるから推奨できない。

756 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 18:11:49.59 ID:jYvDj1vcd.net]
VBScript(WSH)はDimないし使わないのも自然だけどVBAはありがたくOption ExplicitもDimも使うな

757 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 18:14:06.32 ID:IhtMBIEH0.net]
俺は変数宣言するけどoption付けない事も多いな
自分だけのちょんプロとか

758 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 19:23:35.24 ID:vdqKmiMMd.net]
>>750
この文章でモロバレ

759 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 20:01:04.28 ID:+76Iryda0.net]
With使わないのは、C#に採用されなかったように最近の流れだからまあいい
Doも、ループはWhileに統一しろってルールならまあいい

Dim使わんってどういうことだ?
まさか変数の宣言しないってことじゃないよな

Option Explicitなんて自分で書くことまずないが、真っ先に変更するオプションじゃないのか

760 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 20:07:27.25 ID:cJeFkg/00.net]
変数の宣言しないと型違いのエラーとか検知しづらくなるし、
コードの中で比較が出てきた時に自作関数の結果か変数の値かどっちと比較してるのかわかりづらくなったり…

とにかく色々エラー回避とかメンテナンス性とか考えて変数宣言しないのはナシよりのナシかと

761 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 20:35:45.94 ID:QG+os5rrH.net]
基礎ができてなくて、型の使い分けがわからなくて全部Variantで書いてる人

762 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 21:04:16.49 ID:PaQQNn710.net]
>>755
しない

以下でエラーが起きないって時点で俺はアホらしくなって宣言をやめた

Sub foo()
Dim a As String
Dim b As Long

a = "1"
b = 2
Debug.Print a + b '3が出るぞ良かったな

End Sub

763 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 21:06:38.67 ID:PaQQNn710.net]
宣言しないと何ができなくなるのか、何を間違えるのかが分からん



764 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 21:30:00.76 ID:6tENHryO0.net]
>>758
それは暗黙の型変換が行われるから。

変数の宣言をしたほうがいいのは以下のような場合にエラーにできるから。

public sub foo()
hensu = 1
Debug.Print hansu + 1
end sub

2が出力されることを期待しているが、この場合1が出力される。(変数名の打ち間違い)

765 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 21:36:40.65 ID:6tENHryO0.net]
VB6やVBAは型が弱いので、変数名の先頭にintやlng、str等をつけてデータ型がわかるようにするのが一般的だと思ってる。
この場合だと
Dim intHensu As Integer
の宣言を入れておくべき。

766 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 21:37:56.47 ID:PaQQNn710.net]
>>760
なるほど
そういう意味では型をつけずに全部variantで宣言はアリなのか
dim a,b,c
ってな感じで

767 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 21:39:48.07 ID:PaQQNn710.net]
>>761
変数名見れば何入ってるか分からないか?

768 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 21:43:37.13 ID:6tENHryO0.net]
>>763
ごめん一般的といったのは、自分がそう思ってただけなので、実際はそうじゃないかも。

769 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 21:45:17.15 ID:jYvDj1vcd.net]
何でもかんでもVariant型だと余計にメモリ食ったり速度面で劣るんじゃなかったっけか

770 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 21:52:57.44 ID:QG+os5rrH.net]
簡単なマクロならメモリも速度もほとんど気にしなくていい
そういうのが気になってきてから速くする方法を勉強してもいいと思う

771 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 21:55:44.85 ID:cJeFkg/00.net]
文字列 String
整数 Long
小数以下も必要 Single
日付 Date
Setが必要なもの Object
なんでも Variant

初心者ならこれくらいの使い分け出来てたら十分だから宣言はして

772 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 21:57:26.01 ID:L/dDaofga.net]
大量のデータをがばっと取るときはsql
とってきたデータをチマチマ加工したいときはVBA

二刀流がべだー

773 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 22:02:54.21 ID:L/dDaofga.net]
変数宣言でいちばん重要なのは
パブリック変数なのか
プライベート変数なのかだよ

型はそんなに気にしなくてよいから
3文字以下ならプライベート、パブリックなら5文字以上にする



774 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 22:18:22.12 ID:Z/jAVLJW0.net]
>>769
いや、そもそも
外部とのやり取りはプロパティで行わないと
ブレイクポイント等仕掛けて
どこから呼ばれたか分かり辛くなることを考えると
変数をPublicで宣言する機会はまず無くなるだろう。

もちろんこのプロパティと言うのは概念的なものを含めて
Javaの様に関数と同じ様に設定することも含めるけど。

そうすればパブリック、プライベートの
判断のために変数名の考慮を行う必要も無くなる。
良かったな。

775 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 22:31:52.03 ID:PaQQNn710.net]
>>765
variantはかなり遅い
longをvariantにすると
0.001秒の処理が0.01と、処理時間が10倍近くになることも

>>769
vbaのグローバル変数はマジでやめたほうが良い。大体良くない事が起こる
グローバル変数使うなら作業シートに書いたほうがよっぽどマシ
逆にシートにないデータをconst staticみたいに使うならアリ

776 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 23:54:10.02 ID:+76Iryda0.net]
>>758
そもそもそのコードで3を期待しないのがおかしいとしか思えんのだが

"12"を期待するなら+じゃなくて&使えよ

777 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 00:48:39.55 ID:vQpWnC+C0.net]
>>761
ハンガリアンなついな
VBAあたりを最近書いてないからか

778 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 01:41:49.82 ID:SiihAWPs0.net]
variantにすると型間違いでエラーがでないので
やはり推奨できない

779 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 02:15:37.67 ID:vzYu7ze/0.net]
知恵を貸してください

ある可変長2次元配列のデータについて
各列のデータから1つずつ抽出した文字列の組み合わせを出力したいと考えています

例えばArray(2,2)のデータが以下だとします
Array(0,0)="いちご"
Array(0,1)="みかん"
Array(0,2)=""
Array(1,0)="あまい"
Array(1,1)="すっぱい"
Array(1,2)="にがい"
Array(2,0)="100円"
Array(2,1)="200円"
Array(2,2)=""
この場合
「いちご,あまい,100円」「いちご,あまい,200円」「みかん,すっぱい,100円」
などの
空白を除く2*3*2=12通りの組み合わせ全てを抽出したいのです
(抽出先はシートでも配列でも何でも良いです)

そして実際にはこの配列をArray(x,y)とすると
xとyは1以上の自然数で不定です

配列の行数が固定長であれば各行において行の数だけFor文でループの中にループを入れれば良いのでしょうが
配列の行数が1以上の不定数の場合にどうすれば良いか思い付きません

vbaというよりアルゴリズムの問題かも知れませんが
良い方法はあるのでしょうか

780 名前:デフォルトの名無しさん [2021/05/09(日) 02:26:22.29 ID:qbmXU1K50.net]
はい、いつものあいつ

781 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 04:53:38.03 ID:yBvaHslb0.net]
>>724
はい、難しいです。簡単なら今頃VBマスターで溢れ帰ってます!
日々の努力あるのみです!

782 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 06:11:50.07 ID:Gu7b6Am40.net]
相手しない相手しない

783 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 08:20:21.39 ID:nRlrfZeFa.net]
ワークシートをグローバル変数みたいなつかい方をする

うむ、よくある



784 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 09:19:54.62 ID:TBZcO69u0.net]
uboundで現在の配列の最大要素番号調べて、そこまでループとかじゃないの?
そもそも配列なんて自分はあんまり使わない。redim preserveって確かかなり遅かった気がする。

785 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 09:44:03.47 ID:1mWvM4p1M.net]
ReDim Preserveは1番ケツの次元しか可変に出来ねぇのがとても残念

786 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 09:48:20.73 ID:HdQWbOvH0.net]
>>775
Sub foo()
Dim array1() As String
ReDim Preserve array1(3, 3)

array1(0, 0) = "いちご"
array1(0, 1) = "みかん"
array1(0, 2) = ""
array1(1, 0) = "あまい"
array1(1, 1) = "すっぱい"
array1(1, 2) = "にがい"
array1(2, 0) = "100円"
array1(2, 1) = "200円"
array1(2, 2) = ""

For Each dim1 In array1
If dim1 <> "" Then
Debug.Print dim1
End If
Next

End Sub

vbaの動的配列は本当にめんどくさいな

787 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 10:05:56.73 ID:Nzaho5/SH.net]
行数、列数はUBound関数で調べられる
2次元配列の場合は

UBound(array1, 1)
UBound(array1, 2)

で、それぞれの次元の大きさが取得できる
2番目のパラメータが対象となる次元

あと、多次元配列に一気に代入するにはarray関数を次元と同じ数だけ入れ子にする方法がある

  array1 = Array( _
    Array("いちご", "みかん", ""), _
    Array("あまい", "すっぱい", "にがい"), _
    Array("100円", "200円", ""))

788 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 10:13:55.83 ID:vzYu7ze/0.net]
ありがとうございます

ReDim Preserveの配列再定義は知っているのですが
例えば>>782のようだと
「いちご」
「みかん」
「あまい」
……
「200円」
のような2+3+2の7個出力されるだけですよね

「いちご,あまい,100円」
「いちご,あまい,200円」
「いちご,すっぱい,100円」
……
「みかん,にがい,200円」
のような2*3*2の12個を出力したいのです

行数が固定なら例えばArray(2,x)のように列数が不定でも
For i=0 To UBound Array(0,x)
For j=0 To UBound Array(1,x)
For k=0 To UBound Array(2,x)
Debug.Print Array(0,i)& "," & Array(1,i)& "," & Array(2,i)
Next
Next
Next
のようにして空白部分の例外処理を適当に入れれば良いのは分かりますが
行数が不定なので分からないというお話です

789 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 10:14:00.97 ID:Nzaho5/SH.net]
>>775
2次元配列の要素数が不明の場合こういう書き方もできる
  For i = 0 To UBound(array1)
    For j = 0 To UBound(array1(i))
      Debug.Print array1(i)(j)
    Next j
  Next i

790 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 10:14:31.62 ID:HdQWbOvH0.net]
>>782は全然違うわ、スマン

791 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 10:50:20.26 ID:Nzaho5/SH.net]
>>784
とりあえず、Array関数というのが存在するから、変数名にArrayは使っちゃだめ
ArrとかMyArrayとか何か別の名前に変えないと

792 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 11:38:04.63 ID:TBZcO69u0.net]
自分で書くならこうかな?
再帰処理使わないでスッキリ書く方法は思いつかなかった。

https://i.imgur.com/noQC9bg.png

これでだめ?

793 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 11:47:23.05 ID:Nzaho5/SH.net]
とりあえずもう一つ突っ込みたい
Preserveは不要だしパラメータも(3, 3)じゃない
ReDim array1(2, 2) が正解

>>788
ネストの深さが不定の時は再帰でやるのが一番自然だと思うよ



794 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 11:59:36.87 ID:TBZcO69u0.net]
ごめんちょっと動作検証してたら、Uboundのとこxとyが逆だった。
Ifの中に書いてるのが、Ubound(ary1)
でForの中に書いてるのが
Ubound(ary1, 2)
ですね。

795 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 12:09:11.80 ID:TBZcO69u0.net]
>>789
おっしゃるとおりですm(_ _)m
せっかくご指摘いただいたので、直したものを上げ直します。

https://i.imgur.com/ykrQPY4.png

796 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 12:10:40.52 ID:Nzaho5/SH.net]
やってることは同じだけど画像だと入力が面倒だろうし、俺もほとんど同時に作っちゃってたんで貼らして

Option Explicit
Sub foo()
  Dim array1() As String
  ReDim array1(2, 2)
  array1(0, 0) = "いちご"
  array1(0, 1) = "みかん"
  array1(0, 2) = ""
  array1(1, 0) = "あまい"
  array1(1, 1) = "すっぱい"
  array1(1, 2) = "にがい"
  array1(2, 0) = "100円"
  array1(2, 1) = "200円"
  array1(2, 2) = ""

  Call recloop(array1, 0, "")
End Sub

Sub recloop(array1, row1, str)
  Dim col1
  If row1 < UBound(array1, 2) Then
    For col1 = 0 To UBound(array1, 2)
      If array1(row1, col1) <> "" Then Call recloop(array1, row1 + 1, str & array1(row1, col1) & ",")
    Next
  Else
    For col1 = 0 To UBound(array1, 2)
      If array1(row1, col1) <> "" Then Debug.Print str & array1(row1, col1)
    Next
  End If
End Sub

797 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 12:23:48.39 ID:vzYu7ze/0.net]
ありがとうございます
再帰関数の知識は持っていたのですが
自身で再帰関数を使用したことは無かったため盲点でした
このように使用するのですね

助かりました参考にさせて頂きます

798 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 13:41:59.08 ID:WHUEfE6G0.net]
>>779
グローバル変数と言うよりストレージみたいなもんだと思ってる

799 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 21:06:29.88 ID:o10D8BaNM.net]
ReDim使うのって要素数に変数使うときじゃなかった?
数が決まってるならDim array(0 to 2, 0 to 2) As Stringで良いんだよね?

800 名前:デフォルトの名無しさん [2021/05/09(日) 21:07:35.90 ID:OCR3m9+L0.net]
>>737
あなたに禿同!

801 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 21:47:13.65 ID:HdQWbOvH0.net]
>795
動的配列と静的配列の違いだよ
「変数」でもなければ「数が決まってる」でもなく、「後で変更するかどうか」が違う所

802 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 01:12:41.56 ID:8FNokcfwd.net]
再帰を使わない方法でやってみた
「r行c列」の配列を「c桁のr進数」とみなしてる。とりあえず動いたけどバグあるかも

Sub Macro5()
  Dim array1() As String
  ReDim array1(2, 2)
  array1(0, 0) = "いちご"
  array1(0, 1) = "みかん"
  array1(1, 0) = "あまい"
  array1(1, 1) = "すっぱい"
  array1(1, 2) = "にがい"
  array1(2, 0) = "100円"
  array1(2, 1) = "200円"
  row0 = UBound(array1, 1)
  col0 = UBound(array1, 2) + 1
  For n = 0 To (row0 + 1) ^ col0 - 1
    nn = n
    s = ""
    For row1 = row0 To 0 Step -1
      col1 = nn Mod (row0 + 1)
      nn = nn \ (row0 + 1)
      If array1(row1, col1) = "" Then
        s = ""
        Exit For
      Else
        s = array1(row1, col1) & s
        If row1 Then s = "," & s
      End If
    Next
    If s <> "" Then Debug.Print s
  Next
End Sub

803 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 20:50:28.57 ID:6x/72ii/a.net]
そもそもの疑問で、なぜVBAは初心者向けとか言われるのでしょうか。
こんなに小難しいチマチマしたこも書かなきゃいけないのに。
全然わからん。



804 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 20:50:49.81 ID:GwFlyMni0.net]
>>761
俺もハンガリアン使ってるわ

805 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 20:53:01.66 ID:2ArSfNqX0.net]
>>775
総当りってよく考えればパワークエリでクロス結合すれば一発だろって思ったら、パワークエリにクロス結合が無かった・・・
https://www.shegolab.jp/entry/excel-macro-cross-join

accessだとアホみたいなクエリで即完成
https://i.imgur.com/moHa3bx.png

806 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 20:55:51.32 ID:/NuMOBBIM.net]
>>799
昔はプログラミングはもっと敷居が高かったんだよ
その中では、Excelさえあれば使えてUIはExcelのワークシートをそのまま利用できるという手軽さは初心者には魅力的だった
その頃の名残だね
今ではPowerAppsとかGASとかSalesforceとかもっと簡単で強力な選択肢は色々あるし、
プログラミングの勉強ならPythonとかJavaScriptの方が初学者には敷居が低い

807 名前:デフォルトの名無しさん [2021/05/10(月) 20:57:55.19 ID:vb1TGTCB0.net]
ハンガリアンより#%&$の方が分かりやすいよな

808 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 21:06:13.53 ID:6x/72ii/a.net]
>>802
レスありがとうございます。
今、流行りの言語に比べてなぜこんなに、と思っていました。
もっと難しかったのですね。
理解しました。
パソコン仕事を楽に短縮できるよう頑張ります。

809 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 21:09:38.66 ID:2ArSfNqX0.net]
vbaは本当に楽。forとif覚えるだけで仕事がはかどりまくり
Cはメモリの知識やらヘッダやら本当に覚える事が多かった上に超便利なワークシートってもんもない

810 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 21:10:42.65 ID:aMiH/GVN0.net]
まったくな

811 名前:デフォルトの名無しさん [2021/05/10(月) 21:13:02.21 ID:vb1TGTCB0.net]
沢山の似たようなライブラリが公開されていて
いろいろな方法でやりたいことが実現できる

それはそれはいい時代になりました

でも、コレがやりたければコウ書け!
まどろっこしいが他に道は無い!
ってのも初心者にはいいものですよ

812 名前:デフォルトの名無しさん [2021/05/10(月) 21:46:59.07 ID:WQl4RFpm0.net]
条件付き書式や文字の縮小機能まであって、CopyFromRecordsetの異様な速さ
(もちろんシート関数やオートフィルタの速さも異様でしょう)
VSでは無理だし、自作も当然無理
Excel部署の人だって、1人では無理でしょう

813 名前:デフォルトの名無しさん [2021/05/10(月) 21:59:47.57 ID:WQl4RFpm0.net]
でも.NETに比べれば、メモリを意識するよ
参照渡しとかMidで打刻とか
結果、値渡しの.NETの方が速いけどw(初期の.NETはVBAの方が速かったが)



814 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 22:34:57.25 ID:ViCp850r0.net]
VBA は、シェルスクリプトと同じ。
ちょっとした事しかできない

それを知らない香具師が、複雑なプログラミング用途に使って、
結局保守できなくて、Ruby の10倍ぐらいのコストが掛かる

ちょっとしたナイフで、マグロをさばいたりするのと同じ。
道具・用途のミスマッチ

だから、ウェブ系の会社は、プログラミング言語は適材適所で選択しますって言う。
道具・用途を合わせる。
言語を固定化しない

頭が柔軟。
先に道具を選択しない。
用途から道具を選ぶ

実社会では、ほとんどこればっかり

815 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 23:04:34.19 ID:E9+bgpxg0.net]
ExcelのAPIが優秀なのであってVBA自体は微塵も良くない

816 名前:デフォルトの名無しさん [2021/05/10(月) 23:09:51.84 ID:W7s1RH430.net]
>>810
で、終わったRubyしか使えず>>712みたいな嘘を書き散らすようになると

817 名前:デフォルトの名無しさん [2021/05/11(火) 00:42:36.92 ID:OkNnulfr0.net]
先に道具を選択しないと言いながら、道具ありきの叩きw

オープン系は外から機能を持って来るのが特徴なので、言語自体の機能は不要
なんでも呼べるシンプルなシェルのようなもの、オープン系の起点としてふさわしい

大量データの組合せならSQL ServerにBULK INSERTしてCROSS JOINするのが最速のはず
でもそのクエリを投げるのはVBAで十分で、結果の表示はExcelのCopyFromRecordsetが最速のはず

818 名前:デフォルトの名無しさん mailto:sage [2021/05/11(火) 01:44:32.13 ID:hzo0csgz0.net]
>>801
それじゃ希望した動作にならないのでは?
テーブルの数が不定なのだから。
集計するごとにクエリを作り直すことになる。

819 名前:デフォルトの名無しさん mailto:sage [2021/05/11(火) 05:27:49.58 ID:/SA0DWk40.net]
>>814
クエリってAccess VBAで動的に生成できるんだぜ

820 名前:デフォルトの名無しさん mailto:sage [2021/05/11(火) 07:53:09.78 ID:FeyzCVkSd.net]
>>815
そんなん知ってるが、結局VBAかよw

821 名前:デフォルトの名無しさん mailto:sage [2021/05/11(火) 09:04:47.57 ID:/SA0DWk40.net]
>>816
適材適所だろ
全部VBAで組むより全然楽だし分かりやすいよ

822 名前:デフォルトの名無しさん [2021/05/11(火) 11:31:41.06 ID:OkNnulfr0.net]
無償のSQL Serverがあるのに、わざわざ有償で低性能のAccessを使う理由は、初級者であること以外にないですよ
でもExcelはいろんな点で他では追い付けない性能があるので、初級者でなくても使う理由がある

AccessのグリッドもVS等の普通のグリッドとは違い、非同期のリピーターコントロールでできていて、
大量件数でも先頭から順次描画し、全行をメモリに持たないため、高速になるとのこと
その点では、VSより性能がいい(あと子要素の帳票フォームの簡潔さ)
そのかわり常に大量のイベントが走るため、不安定になりやすい
(DBとしてはなんちゃってなので、業者はADP等でSQL Serverと連携して使う)

その速度をさらに超えるのがExcel(特定の使い方で)
イベントが少ないので、不安定になりにくい(Delphiもその点が良かった)
イベントはブック単位で代表できるため、ソースも統合管理しやすい

823 名前:デフォルトの名無しさん mailto:sage [2021/05/11(火) 11:39:24.42 ID:UIB0JMdPa.net]
ユーザーフォームのマルチページ、タブ自体のBackColorプロパティってありますか?
なければ代替手段を教えてください



824 名前:デフォルトの名無しさん [2021/05/11(火) 14:43:21.70 ID:0OaQcACpM.net]
Excelフォームが中途半端な出来損ないだから
ここを最新のユーザーエクスペリエンス()で作り直せばAccessなんかすぐに駆逐できる

825 名前:デフォルトの名無しさん mailto:sage [2021/05/11(火) 18:04:28.65 ID:ZT0Qqj13a.net]
そうだね
大規模なのはSQL
小回りをきかせたいときはエクセル
事務屋ならこれで8割できてしまうだろうね

826 名前:デフォルトの名無しさん [2021/05/11(火) 19:06:43.69 ID:YSh4nGIkM.net]
ただ、VBAはヤメテ

827 名前:デフォルトの名無しさん mailto:sage [2021/05/12(水) 12:57:12.16 ID:mV8qcvY8a.net]
フォームがもう少し何とかなればとは思うよ
>>819然り、痒いところまであとちょっとって感じることがしばしば

828 名前:デフォルトの名無しさん mailto:sage [2021/05/12(水) 15:18:28.53 ID:BdPBmasF0.net]
>>822
アホか
ここは何のスレだと思ってるんだ?
VBA書くのがイヤなら
SQLSERVERのスレ立てて
そこでSQLでもストアドプロシージャでも
関数でも好きな話題してれば良かろう

829 名前:デフォルトの名無しさん mailto:sage [2021/05/12(水) 15:47:57.27 ID:MQbyKY6x0.net]
なんだ?喧嘩勃発か?

830 名前:デフォルトの名無しさん mailto:sage [2021/05/12(水) 15:55:47.07 ID:bNkKHmITM.net]
ちょこちょこ書く分には十分なものだと思うよ

831 名前:デフォルトの名無しさん mailto:sage [2021/05/13(木) 12:11:34.16 ID:RAFicIoxa.net]
そうかな

832 名前:デフォルトの名無しさん mailto:sage [2021/05/13(木) 16:10:32.92 ID:yc7BZe0Ia.net]
ビジネスやってる人じゃないとわからないと思うよ

833 名前:デフォルトの名無しさん mailto:sage [2021/05/13(木) 17:14:21.80 ID:4K+rsr0c0.net]
確かに。趣味レベルの自分じゃ縁のない話すぎるわ



834 名前:デフォルトの名無しさん mailto:sage [2021/05/13(木) 20:39:49.87 ID:BPKFCkYp0.net]
なんのビジネスだよ・・・

835 名前:デフォルトの名無しさん mailto:sage [2021/05/13(木) 20:43:26.98 ID:nlP9UXqMd.net]
普通の仕事で書くコードってことじゃないの

836 名前:デフォルトの名無しさん mailto:sage [2021/05/13(木) 20:48:35.69 ID:a3vkA3q7a.net]
ビジネスってよりワークで使うかな
ワークマンってよりはビジネスマンか…

837 名前:デフォルトの名無しさん mailto:sage [2021/05/13(木) 20:50:41.60 ID:a3vkA3q7a.net]
使いどころはビジネスってよりワークかな
でもワークマンってよりはビジネスマンか…

838 名前:デフォルトの名無しさん mailto:sage [2021/05/13(木) 21:12:55.35 ID:HJ1eRgpP0.net]
ワークってよりビジネスな場合もあるかな
でもワークマンってよりはビジネスマンか…

839 名前:デフォルトの名無しさん mailto:sage [2021/05/13(木) 21:19:10.07 ID:BPKFCkYp0.net]
なんでvbs採用したんだろう
jscriptならもっと未来あっただろうに
tsへの移行も自然だっと思う

840 名前:デフォルトの名無しさん mailto:sage [2021/05/13(木) 21:27:44.43 ID:HJ1eRgpP0.net]
>>835
そらもうvbaの登場時期が早かったからとしか言いようがない
vba開発チームが頑張ったんだろう
30年ぐらい前はBかCが当たり前で、インターネットもロクにないのに謎のjscriptなんて言語が勝つのは無理がある

841 名前:デフォルトの名無しさん mailto:sage [2021/05/14(金) 08:17:06.17 ID:NU+NRHZVd.net]
>>818
www
初級者まる出しの文章で笑えるw

842 名前:デフォルトの名無しさん mailto:sage [2021/05/14(金) 08:20:10.01 ID:NU+NRHZVd.net]
>>819
普通じゃ無理。
無理矢理タブもどきをつくるか、頑張ってWin32APIでやるか。
Win32APIでやるのは、まあ辞めとけ。

843 名前:デフォルトの名無しさん mailto:sage [2021/05/14(金) 08:39:26.02 ID:q7wj393Za.net]
タブを切り替えた瞬間にバックカラーも切り替えれば良いだけ



844 名前:デフォルトの名無しさん mailto:sage [2021/05/14(金) 09:49:10.63 ID:rbrSxZ/Wa.net]
勝手に見出しの色のことだと思ってた
エクセルのシートにやるみたいなやつ

845 名前:681 mailto:sage [2021/05/14(金) 10:40:26.20 ID:f8pG7pdca.net]
681です
皆さんのおかげで無事目的のコードが作れました

あと1つ質問なのですが…
画像のように重複した数値を除く総計を算出したいと思っています
会社名毎の数値を合計すればいいだけだと思ったのですが、
どうしても重複のものも一緒に合算してしまいお手上げ状態です
因みに元データは都合によりいじれないため、合算前に重複部分を削除等はできません
恐れ入りますが、宜しくお願いします

846 名前:681 mailto:sage [2021/05/14(金) 10:41:19.08 ID:f8pG7pdca.net]
画像を貼り忘れておりました
https://i.imgur.com/HLZYwhr.png

847 名前:デフォルトの名無しさん mailto:sage [2021/05/14(金) 11:33:58.88 ID:+U8xhPuO0.net]
会社ごとの重複を除く合計が出たんだからそれを足

848 名前:すだけだろ
逆に何をやったらまた重複したものも合算するのか理解できない
[]
[ここ壊れてます]

849 名前:デフォルトの名無しさん mailto:sage [2021/05/14(金) 11:38:54.22 ID:usYNgZ690.net]
いつものあいつだぞ

850 名前:デフォルトの名無しさん mailto:sage [2021/05/14(金) 12:11:07.63 ID:mu0LH/UJa.net]
>>841
もとデータをいじらないでも、もとデータを別のシートにコピーすればいじれるんじゃね

851 名前:デフォルトの名無しさん mailto:sage [2021/05/14(金) 12:24:14.75 ID:Vktv5FHm0.net]
>>841
重複除けてるのなら、結果をSUM関数で合算するだけじゃん。

>>686
で上げたように、そもそもVBAすら使う必要ない。

852 名前:デフォルトの名無しさん [2021/05/14(金) 13:02:54.78 ID:kX62fe1ba.net]
君らも構うねー
>>681への数多の回答を経て「皆さんのおかげで」としか言及しない礼儀知らずなんぞ俺なら2度と助けようと思えないけどな

853 名前:デフォルトの名無しさん mailto:sage [2021/05/14(金) 14:11:01.00 ID:C4z8VNUC0.net]
>>841
SQLでやってるの?
VBAでやってるの?

SQLなら会社、氏名、数値でグルーピングしてから合計求めりゃいいだろうし
VBAでやってるなら上からループして会社、氏名、数値をコレクションかディクショナリーに登録しておいて
同じ組み合わせのものが登録されてたら飛ばせばいいだけじゃないの?



854 名前:デフォルトの名無しさん mailto:sage [2021/05/14(金) 16:00:12.91 ID:bBl2sxC0r.net]
ほんとに、よう構うわ

855 名前:デフォルトの名無しさん [2021/05/14(金) 16:15:08.56 ID:N2rlLeCr0.net]
暇人しかレスしない
そりゃ高齢化する罠






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<295KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef