トップページtech
1002コメント360KB

Excel VBA 質問スレ Part40 [無断転載禁止]©5ch.io

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2016/02/19(金) 02:49:44.77ID:BQQ9mWtn
ExcelのVBAに関する質問スレです

                   ___
       ___      /____ヽ      ____
      /____\    | |´・ω・`| |    /___ヽ
      .l |´・ω・`|  ニX二 . ̄ ̄ ̄  二X二  |´・ω・`| l 俺たちに任せろ
      !、 ̄ ̄ ̄  ヽ   |       |    /    ̄ ̄ ̄/
       ヽ_/ヽ、  ヽ__)  \__/\_/.   /_/  ノヽ_/
             ̄                ̄ ̄

このスレはコード書き込みOKです。
作成依頼もOKですが、作成依頼限定ではありません。

コードが嫌な人・作成依頼が嫌な人は別スレ建ててください。

※前スレ
Excel VBA 質問スレ Part39 [転載禁止]2ch.net
http://peace.2ch.net/test/read.cgi/tech/1448624205/
0693デフォルトの名無しさん2016/03/19(土) 22:01:48.03ID:ZHLdlz8S
>>689
カプセル化が何のためにあるかわかる?
カプセルの境界を越えてアクセスするってことは、まさにそのオブジェクトを破壊できるって事だぞ
お前は自分が信頼できるからやらないって主張してるけど

俺は境界を越えてアクセスする事が便利な場面がある事を否定してないし
それをやったから問題だと言ってるわけじゃない

反則技を使おうとして、これは反則じゃないって主張してるから
いやそれは反則だよって指摘しただけ
0694デフォルトの名無しさん2016/03/19(土) 22:03:39.78ID:IAjs3zZu
アクセスの隠蔽に関してもトレードオフの問題だと思う。
そりゃパブリックインタフェースだけでは必要十分なら何も悩むところはない。
それだけでは無理なとき、「同一クラス内なら公開する」のと「パブリックインタフェース化する」のどっちを選ぶかって話。
0695デフォルトの名無しさん2016/03/19(土) 22:05:51.59ID:IAjs3zZu
>>694
「公開する」ってのはデータをそのまま晒せって意味じゃないよ。privateメソッドを呼べるようにするってのを含んだ概念だよ。
0696デフォルトの名無しさん2016/03/19(土) 22:07:57.73ID:Vh/tRJ7p
>>692
それはvbaでならどうするか?という質問だな。
どうしてもアクセス制御したいならリードオンリーのプロパティを公開すればいい
俺なら面倒だら全部publicでやるが
0697デフォルトの名無しさん2016/03/19(土) 22:37:09.48ID:IAjs3zZu
>>693
きみもプライベートな「データ」メンバに直接アクセスすることの是非しか問題にしてないみたいだね。
0698デフォルトの名無しさん2016/03/19(土) 22:44:45.63ID:ZHLdlz8S
>>697
カプセル化の原則の話をしただけで、べつにデータに限った話をした覚えはないが
0699デフォルトの名無しさん2016/03/19(土) 22:48:23.81ID:H80uBE1C
とりあえず考え的に正しいか分からないけど、
見つけたよ。VBAで同じクラスのインスタンスに
Privateなプロパティ設定する方法。

ちとまどろっこしいけどな。
>>684がヒントになったな。
0700デフォルトの名無しさん2016/03/19(土) 22:51:33.67ID:ZHLdlz8S
>>699
外部への依存なしに実現できるならぜひやり方晒してくれ
0701デフォルトの名無しさん2016/03/19(土) 22:52:24.17ID:IAjs3zZu
>>698
そうか。でもオブジェクトの破壊に繋がるようなことを言ってたよね。
値の設定はまあそのオブジェクトにメソッドに任せるさ。そうすりゃ自分自身の整合性は担保してくれるだろう。
でもその操作自体がクラス外には無関係なときはprivateにしたいのさ。
0702デフォルトの名無しさん2016/03/19(土) 23:01:28.59ID:IAjs3zZu
俺も昨日から考えて裏技は出来た。外部API依存あるけど。
データ破壊の可能性はあるもののクラス内で閉じていて、呼び出し側で変なことはできないので一応妥協範囲。
0703デフォルトの名無しさん2016/03/19(土) 23:16:32.96ID:H80uBE1C
なんか改行規制に引っかかるから3回に分けるな。

正しいかどうかは微妙なところだが、一応理に適っているとは思う。

任意の標準モジュール

Sub Hoge()
Dim cls1 As IClass
Set cls1 = New TargetClass
Dim cls2 As IClass
Set cls2 = New TargetClass
Set cls2 = cls1.GetClone()
Call MsgBox(CStr(cls2.TaegetValue))
End Sub

クラスモジュール:IClass

Option Explicit
Property Get TaegetValue() As Long
End Property
Property Let TaegetValue(ByVal value As Long)
End Property
Public Function GetClone() As IClass
End Function
0704デフォルトの名無しさん2016/03/19(土) 23:17:40.92ID:H80uBE1C
クラスモジュール:TargetClass
Option Explicit
Implements IClass
Private m_value As Long
Private Property Get IClass_TaegetValue() As Long
IClass_TaegetValue = m_value
End Property
Private Property Let IClass_TaegetValue(ByVal value As Long)
m_value = value
End Property
Public Function IClass_GetClone() As IClass
Dim cls As IClass
Set cls = New TargetClass
cls.TaegetValue = 1
Set IClass_GetClone = cls
End Function
0705デフォルトの名無しさん2016/03/19(土) 23:19:16.95ID:H80uBE1C
微妙というのは多分インターフェースのPropertyのデフォルトはPublicだということ。
だがインターフェースを介在させない場合Privateは隠蔽されるので、
通常通りにNewして見えてしまうことはない。
0706デフォルトの名無しさん2016/03/19(土) 23:43:25.08ID:ZHLdlz8S
普通に考えて、使いたいクラスはTargetClassだが、TargetClassとして宣言出来ないのはなぁ
IClassとして宣言して、TargetClassとしてNewして下さいってルールを徹底させる必要があるわけだが
それならこのメソッドは使うなってルールを徹底させるのと大差ない気がする
0707デフォルトの名無しさん2016/03/19(土) 23:50:00.02ID:H80uBE1C
>>706
ちょっとまて。
TaegetClassとして宣言すれば
Privateで設定されているプロパティが隠蔽されるって言ってるんだけど。
内容、読み取れてる?
0708デフォルトの名無しさん2016/03/19(土) 23:53:46.48ID:IAjs3zZu
>>707
Sub Hoge() の中のは違うってことか?
0709デフォルトの名無しさん2016/03/19(土) 23:59:43.58ID:H80uBE1C
>>708
一度インターフェースを噛ませるという手順を踏むことで
Privateのプロパティにもアクセス出来るようにしている例を挙げているんであって
Privateで指定されているプロパティだから通常のNewでは隠蔽される。
0710デフォルトの名無しさん2016/03/19(土) 23:59:48.64ID:ZHLdlz8S
>>707
ああ、通常使いたいプロパティはTaegetClassに別途設定しろって事か
0711デフォルトの名無しさん2016/03/20(日) 00:06:44.02ID:qgldDaIb
>>710
もしこの方法でよいということであれば、
利用価値が有るかどうかはともかく、
旧VBやVBAの方が細やかなスコープを設定出来るということになる。
良かったな。
0712デフォルトの名無しさん2016/03/20(日) 00:27:59.83ID:GdGOCP5U
あら?複製元は自分のパブリックメソッド内で自分のtargetvalueを触れるのはわかるけど複製先のtargetvalueを触れるの???
0713デフォルトの名無しさん2016/03/20(日) 00:29:29.84ID:TtjNwfG2
似たようなことはVB.NETでもインターフェイスの明示的実装という機能で実現可能
0714デフォルトの名無しさん2016/03/20(日) 00:36:40.94ID:TtjNwfG2
>>712
IClassだから触れるだろ
当然IClassにキャストすればどこからでもガバガバ
0715デフォルトの名無しさん2016/03/20(日) 00:39:03.27ID:qgldDaIb
>>712
動作確認済み。

>>713
そう。だけど、逆に同じクラス、違うインスタンスのPrivateなものを隠蔽することが出来ない。
するべきなのかどうかは置いておいてね。
0716デフォルトの名無しさん2016/03/20(日) 00:43:23.34ID:qgldDaIb
>>714
わざわざキャストさせるということは触ること前提だからそうなるね。
でもそれを言ったら.Netも同じ。
0717デフォルトの名無しさん2016/03/20(日) 08:44:46.30ID:TtjNwfG2
.NETなら内部クラスに宣言したPrivate Interfaceを明示的実装したら絶対に外からは触れない
元々他インスタンスのPrivateにアクセスできるから不要だけど
0718デフォルトの名無しさん2016/03/20(日) 09:00:59.71ID:qgldDaIb
>>717
そうか、インナークラスの概念か。迂闊だったわ。
ま、今回はインターフェースだけど同じだな。
0719デフォルトの名無しさん2016/03/20(日) 09:31:47.19ID:qgldDaIb
論点としては明示的にインターフェースを介在しなければPrivateに触れないということが、
カプセル化に足り得ることなのかどうかということと、
本当に同一クラスで違うインスタンスのPrivate宣言されたものが
隠蔽されるスコープが必要なのかということの2点か。

どうだろな。
0720デフォルトの名無しさん2016/03/20(日) 11:02:49.50ID:jHsQHzI2
だからVBAの仕様を変えられない以上は意味ないんだから別スレでやれ。
0721デフォルトの名無しさん2016/03/20(日) 13:05:40.51ID:8HbjV0ul
>>720
ですね。
0722デフォルトの名無しさん2016/03/20(日) 13:45:04.69ID:f66aE8wc
>>719
そこまで出来れば十分だろ
>>720の言うとおりこれ以上
マヌケなC++erに付き合う必要もないだろう
0723デフォルトの名無しさん2016/03/20(日) 14:07:56.82ID:pfOQftnX
AtCoderとかVBAで解いてる人いない?
0724デフォルトの名無しさん2016/03/20(日) 17:17:01.45ID:J2K9MuYg
>>719
好きにすればいいよ。
むしろ業務の方が要件を満たしてればそれ以上のカプセル化とか考えなくていいかも。
公開するんであればまた別だろう。

>>723
投稿できなからやらない
0725デフォルトの名無しさん2016/03/21(月) 00:12:02.37ID:K4l5ex/e
皆さんVBAの処理時間はどのくらいの物を作っていますか? 24時間動かし続けている人も居るのですか?
0726デフォルトの名無しさん2016/03/21(月) 04:03:07.99ID:lZ+XcLv2
>>725
処理によって1秒かからないものもあれば
1日以上かかるものもあるけど
何でそんなことを聞いているのかな?
0727デフォルトの名無しさん2016/03/21(月) 04:44:20.97ID:4m5Wnyvm
VBAを24時間もの長い間動かしていると奇妙で名状し難い不定な動きを引き起こすことについて宇宙的に議論したいんだよ
な?
0728デフォルトの名無しさん2016/03/21(月) 05:50:50.72ID:3ccLXt3S
https://www.youtube.com/watch?v=Q4gTV4r0zRs
0729デフォルトの名無しさん2016/03/21(月) 09:02:53.74ID:TTV7yA8/
>>728
いいね。
前にちらっと見たことがあるかも。
0730デフォルトの名無しさん2016/03/21(月) 09:26:02.08ID:Xz9aFOH3
今日も、アンチPublic使用教の信者が蠢いていますね。

何かに取り憑かれているのでしょうか?

終いにはグループで開発とかVBAでそんな寝言を言い始める人が出てくる始末で。
0731デフォルトの名無しさん2016/03/21(月) 09:51:04.04ID:hQVzfahh
>>730
その話はVBAもその気になればPrivateでアクセス出来るという話で落ち着いたから

PublicでもPrivateでも好きな方を選べ
0732デフォルトの名無しさん2016/03/21(月) 10:10:14.63ID:IyXG4J1C
>>730
> 今日も、アンチPublic使用教の信者が蠢いていますね。
今日 Public ガーって言ってるのは君しかいないが? w
0733デフォルトの名無しさん2016/03/21(月) 10:44:59.64ID:hQVzfahh
>>728
最初に使われてるパソコンが
X68000っぽいな
0734デフォルトの名無しさん2016/03/21(月) 10:49:06.77ID:TTV7yA8/
放っとけばいいのにわざわざ自分から蒸し返す心理とは...
誰かに不適切なPublicを指摘されたトラウマとかな?
0735デフォルトの名無しさん2016/03/21(月) 11:39:14.58ID:x3vAjPCr
変数でStaticってどういうときに使うの?
0736デフォルトの名無しさん2016/03/21(月) 12:31:30.37ID:9OwgQuju
>>735
? がついてるから質問なんだろうけど 質問の意図が分らない
Static がどんなものか 分らないんだったら↓
http://officetanaka.net/excel/vba/variable/10.htm
0737デフォルトの名無しさん2016/03/21(月) 12:51:59.24ID:S6t6aFh8
>>736
「また、Endステートメントを実行すると、やはり静的変数はクリアされます。」

これは知らなかったな。
0738デフォルトの名無しさん2016/03/21(月) 14:19:33.49ID:j2Rjw7j2
>>735
同じボタンを押した時、1回目と2回目で処理を切り分けたりするような
モジュールレベルのスコープにするほどでもないけど、
前回の状態を保持していたいような変数のときかな。

初期状態の設定が限られているし、本当にあまり使い道はないけどね。
0739デフォルトの名無しさん2016/03/21(月) 16:33:18.95ID:Tj/3rFFi
以下の手順で自動売買ソフトを
作っています。

(1)Excelシート2で定期的に為替レートを取得させる
(2)計算しある条件でフラグを立てる(1を立てる)
(3)シート2のフラグをシート1で表示する
(4)シート1で1が立つと、
別に用意したUwscというソフトが起
動して注文する。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim test As Long
If Range(Target.Address).Value = 1 Then
test = Shell("UWSC実行までのpass", 1)
End If
End Sub


という事をやろうとしています。
自動でシート1に1が立ったらUwscをさせたいのですが、シート2で計算をしているので
シート1には計算式が入っています。

シート1で1を手入力すると実行するようにはなったのですが、
計算式の結果が1になっても自動で起動しません。

どう直せばいいでしょうか
0740デフォルトの名無しさん2016/03/21(月) 17:47:26.23ID:3ccLXt3S
>>728
VBAでもこの計算できるの?
アルゴリズムの組み込みとかも
0741デフォルトの名無しさん2016/03/21(月) 17:51:17.45ID:XSVJMcUi
>>739
この辺が参考になるんじゃないの?

http://m.chiebukuro.yahoo.co.jp/detail/q1175058971
0742デフォルトの名無しさん2016/03/21(月) 17:58:04.07ID:3/YvApPz
>>739
こんな感じ↓のユーザー定義関数

Function Uwsc() as long
Uwsc = Shell("UWSC実行までのpass", 1)
End Function

を作って、適当なセルに

=IF([フラグのセル]=1,Uwsc(),"")

と入れる、とか
0743デフォルトの名無しさん2016/03/21(月) 19:04:07.29ID:x3vAjPCr
>>735>>738
気持ち悪いな。
Static変数は初期化の代入をせずに使えってことか。
もし宣言後すぐに
 Static a as Integer
 a=100
すると意味がないから宣言だけしてa=100みたいなことはしちゃダメってことだし。
0744デフォルトの名無しさん2016/03/21(月) 19:05:12.57ID:x3vAjPCr
じゃStaticの文字列は
最初は文字なしのままの変数として使わないと強制されてるようなもんだよな。
0745デフォルトの名無しさん2016/03/21(月) 19:06:12.62ID:49NnzOUU
>>743
では、他の言語でも使ってろ
0746デフォルトの名無しさん2016/03/21(月) 19:10:17.34ID:Evlnb4qf
>>743
だからあまり使い道がないし、
ここもあまり話題にすらのぼらない。
0747デフォルトの名無しさん2016/03/21(月) 19:14:00.67ID:Evlnb4qf
あ、後何に使ったか忘れたけど
再帰のときに何となく使ったような

でも無理して使うようなもんじゃないことは確か
0748デフォルトの名無しさん2016/03/21(月) 20:35:53.39ID:hYgxa+c0
すみません教えてください

今日の夕飯にラーメンと餃子を食べて屁がとても臭いんです
c++やjavaならブレスケアを飲めば治るんですが
vbaはどうすればよいのでしょうか?
0749デフォルトの名無しさん2016/03/21(月) 20:37:15.41ID:Y+CQ6vla
ブレスケアをアナルに入れて新しい時代の幕開けを感じろ
0750デフォルトの名無しさん2016/03/21(月) 20:43:56.24ID:hYgxa+c0
>>749
ありがとうございます
試してみます
0751デフォルトの名無しさん2016/03/21(月) 21:05:13.65ID:Q4dyYWAF
>>742
動きました。
Uwscの定義を決めて
If分で1が表示されれば実行という意味ですね。
シンプルでわかりやすくなりました
ありがとうございます
0752デフォルトの名無しさん2016/03/21(月) 21:14:04.22ID:1m1Wp84G
>>743,744
Variantで宣言してEmptyかどうかチェックして初期化させるロジック書けばよい
0753デフォルトの名無しさん2016/03/21(月) 22:08:39.28ID:4hvaz5Bm
>>752
多分そういうとんち問答をしている訳ではないと思うよ
0754デフォルトの名無しさん2016/03/21(月) 22:34:01.88ID:Bm9213Hu
Staticは同一処理中に一意な値がほしくなった時とかによく使うけどなぁ
0755デフォルトの名無しさん2016/03/21(月) 22:35:11.26ID:1m1Wp84G
>>753
とんちじゃなくてStaticな変数を初期化するまっとうな方法だけど
Static変数は(Variant前提とはいえ)初期化されてるかどうか区別できるって話で
これをとんち問答だと言うなら、そもそもの発言の意図がわからんわ
0756デフォルトの名無しさん2016/03/21(月) 22:42:56.19ID:S6t6aFh8
>>754
「一意」って「唯一」の意味で言ってる?

>>755
数値は0でデフォルト初期化されるけど、初期値なのかたまたま0という値になったのか判別不能だから
あんたの考えで正しいと思うよ。
0757デフォルトの名無しさん2016/03/21(月) 22:53:29.96ID:4hvaz5Bm
>>755
じゃあStaticはVariantみたいなデカい枠使うことと
VariantはEnptyが必ず初期という決めにしておくということが必要になるということだろ?

それだったらString型のものがVbNullStringであったり
数値型のものが0であったり
Boolean型のものがFalseであるのと変わらない。

まだ自前クラスのインスタンスがNotingである方が
その判別のために使っていると明確に出来る分、分かり易くはなるが、
それでも結局はNotingである場合は初期化状態であるという決めが見て取れない、
初期で決められないのが気持ち悪いって話だと思うんだが。
0758デフォルトの名無しさん2016/03/21(月) 23:01:01.75ID:4hvaz5Bm
>>755
ひょっとしてVariantは一度何か設定すると二度とEmptyを設定出来なくなるのか?

だとしたら分からなくもないけどな。
0759デフォルトの名無しさん2016/03/21(月) 23:20:58.07ID:Y+CQ6vla
最近変な奴多いな
0760デフォルトの名無しさん2016/03/21(月) 23:23:32.17ID:4hvaz5Bm
ブレスケアをアナルに入れろとか言ったりな
0761デフォルトの名無しさん2016/03/21(月) 23:26:10.29ID:Y+CQ6vla
お前自覚あったのかw
0762デフォルトの名無しさん2016/03/21(月) 23:27:32.62ID:4hvaz5Bm
お前は自覚がないようだけどな
0763デフォルトの名無しさん2016/03/21(月) 23:33:31.98ID:wDZuq9VI
git みたいなバージョン管理ツールで管理する良い方法ってあります?
0764デフォルトの名無しさん2016/03/21(月) 23:35:17.19ID:p3S9wzo3
VBSでも使え
0765デフォルトの名無しさん2016/03/21(月) 23:47:53.45ID:49NnzOUU
>>763
ないです。
0766デフォルトの名無しさん2016/03/21(月) 23:54:14.48ID:S6t6aFh8
>>763
gitが使えないの?
0767デフォルトの名無しさん2016/03/21(月) 23:57:19.38ID:S6t6aFh8
>>758
Emptyを再度入力は出来るけどたいていの場合は想定外とできるだろう。
そんな仮定はおけないから厳密にやれと言うなら2フェーズコミットでもするしかない
0768デフォルトの名無しさん2016/03/22(火) 00:06:16.80ID:mGdonu1j
>>767
俺だったら別に気持ち悪くてもいいからそんな細かいこと考えずに使ってしまうか
それが嫌ならそんな面倒なこと考えずにモジュールレベルの変数にしてしまうがな

なぜそこまでStatic変数にこだわる必要があるのか分からん
0769デフォルトの名無しさん2016/03/22(火) 00:13:55.78ID:mGdonu1j
>>767
後よく分からんのだが、VBAで二層コミットってどうやってやるんだ?
0770デフォルトの名無しさん2016/03/22(火) 01:04:29.84ID:dJvZYtfq
相変わらず話がカオスってるなw
お前ら何がしたいんだよホントに
0771デフォルトの名無しさん2016/03/22(火) 07:46:36.57ID:MJ9VuNga
>>768
モジュールレベル変数でも初期化の問題は同じなんじゃ?
0772デフォルトの名無しさん2016/03/22(火) 08:24:45.98ID:99TVABME
>>771
標準モジュールなら初期化関数、クラスモジュールならコンストラクタとか、
いくらでも初期化するところを作れるでしょ。

初期化関数とかで銘打って初期化を行う場合、そこで行うことは初期化な訳だから
むしろそこで設定されている値は初期値であることが見て取れる訳だ。

それは例えばInteger指定した変数が1であっても1が初期値であることを見て取れるよな。

ところがStatic変数はInteger型であれば常に初期値は0固定。
しかも初期値として銘打った訳でもなく、常にデフォルト値であるから何のためにその初期値を設定しているかもへったくれもない。

初期値が設定出来ないからそれに合わせてプログラムを組んで行くことを良しとするなら
そもそもVariantがどうの何て関係ないし、
良しとしないならモジュールレベル変数を外部で初期化してそれを使えばいいって話。
0773デフォルトの名無しさん2016/03/22(火) 09:12:47.63ID:a24Ufvum
   A    B    C     D    E     F1
1 hoge   foo  bar    hige   moge
2 hoge       foo hige
3 hoeg             bar


Selection.End(xlToLeft).Select
を使うと、

セルF1にいれば、A1に移動することが出来ます。
セルF2や、F3だと途中で引っかかってしまします。

現在位置から、一番左端のセル(A列)に確実に移動させることのできる
方法を教えてください。Excelは2010です。お願いします。
0774デフォルトの名無しさん2016/03/22(火) 11:02:58.23ID:dSAc+Pcy
i=Selection.Row
Cells(i,1).Select

じゃダメ?
0775デフォルトの名無しさん2016/03/22(火) 11:34:58.64ID:MJ9VuNga
>>772
ちょっとよくわからない。
その初期化関数というのは誰がどのタイミングで呼ぶんだ?
0776デフォルトの名無しさん2016/03/22(火) 11:49:23.44ID:nMkuIUa1
>>775
772では無いが
book_open()とか?
0777デフォルトの名無しさん2016/03/22(火) 18:32:17.03ID:a24Ufvum
>>774
ありがとございます!
正直、その手があったか!って感じです・・。
発想力に脱帽です。
0778デフォルトの名無しさん2016/03/22(火) 21:13:31.63ID:7bpCpVCV
>>772
>モジュールレベル変数を外部で初期化してそれを使えばいいって話。
そもそもの議論はStatic変数の使いどころなんだから
プロシジャレベルのStatic変数で良いところを、スコープ広げてモジュールレベル変数使えば良いと言う主張なら勝手にやってくれ

Emptyを未初期化以外の状態として使おうなんて考えるやつは他の言語使うかプログラミングやめてくれ
0779デフォルトの名無しさん2016/03/22(火) 21:18:02.82ID:hxwXC9nK
つーかさ、最近のこのスレ

原理原則的なローレベルの話を今頃盛んにやってるのはどういう了見なわけ?
して意味有るの?wwこれから進化するわけでもないし、下手すりゃVBAなん
て消滅する可能性のほうが高いのに。
0780デフォルトの名無しさん2016/03/22(火) 21:19:22.05ID:7bpCpVCV
ああ、Integer型が初期化されてるかどうか判別できないってのが問題だって言うのも違う言語使ってくれ
言語のデフォルト値がセットされてるかどうか以外で初期化されてるかどうか判断できる言語を俺は知らんが
0781デフォルトの名無しさん2016/03/22(火) 21:20:48.45ID:7bpCpVCV
>>779
最近プログラミング初めて、最近の言語と比較して不足点が多いから文句言ってるんじゃないの?
0782デフォルトの名無しさん2016/03/22(火) 21:26:31.05ID:hxwXC9nK
>>781
言ってどうにかなるわけでもなし。飲み屋の愚痴じゃんww
そういうもんだとして受け止めるのがVBAでしょ。疑問を持つなと。
0783デフォルトの名無しさん2016/03/22(火) 21:28:15.42ID:plzhPaGG
>>780
C/C++「おっ、そうだな」

>>781
最近始めてっていうよりはスクリプト言語をしばらく学んでいて下手な自信つけたやつが、
いざ仕事始めたらVBAで初めてのコンパイラ言語に直面してプライドがガタガタになって、
必死にVBAのせいにしてる印象。

不満点もC/C++みたいな「ポインタがいじれない!」よりは、
「配列が勝手に伸びない!」みたいなスクリプト言語の特徴と比べてるものが多いし。
0784デフォルトの名無しさん2016/03/22(火) 21:43:07.31ID:9EEMgYOF
・スコープを諦める
・固定の初期値で我慢する
・Variant を使った少し面倒なコードを書く
のどれを選ぶかだろ
ケースバイケースだけど、個人的には Variant は極力使わない質なのでカウンタとかで初期値が 0 でいいとかでなきゃ、スコープを諦めることが多いかな
0785デフォルトの名無しさん2016/03/22(火) 22:04:12.54ID:dJvZYtfq
なんでお前らそんなに言語の機能に振り回されるん?
使いどころが分からなきゃ使わなければいいんだよ

理解出来ないもんは「今はまだ分からん」でほっとけ
本質を見誤ったままムリヤリ理解したつもりになっても
後々苦労するのは自分だという事も知っておいた方がいいな
0786デフォルトの名無しさん2016/03/22(火) 22:17:04.92ID:7bpCpVCV
>>782
他の言語でこういう機能を、VBAで実現するにはどうするか?という話ならまだ有益な面がある
VBAでのやり方に納得いかないなら他の言語使えって話だけどな

>>785
その言語の機能を理解しようとする事は良い事だと思うぞ
問題は、俺の理解と言語の機能が違うから、言語の機能がおかしいとか欠陥だとかわめくやつ
0787デフォルトの名無しさん2016/03/22(火) 22:27:39.94ID:plzhPaGG
VBAがVB6の仕様のまま残されたのは、VB6がそれだけ使いやすかったからだしな。
他の言語で学んだ作法を捨ててVBAと向き合えば使いやすくなる。
0788デフォルトの名無しさん2016/03/22(火) 22:34:50.40ID:tjbCDibP
>>778
>Emptyを未初期化以外の状態として使おうなんて

話の流れとはあまり関係ないけど、
何らかのサーチの結果「見つかりませんでした」を意味する値としてEmptyを入れることはある。
これは未初期化とはちょっと意味が違う。
0789デフォルトの名無しさん2016/03/22(火) 22:36:27.83ID:dJvZYtfq
>>786
悪いと言ってるのではない
知らない事を理解する為にはその背景にある思想や新たな概念が必要になる
自分の中にそのバックボーンの準備が出来てない時には回り道する事も重要なんだよ

それを億劫がって知らない部分だけピンポイントで理解しようとあがくから
最近のこのスレみたいなとっちらかったカオスな状態になってんだよw
0790デフォルトの名無しさん2016/03/22(火) 22:53:24.79ID:7bpCpVCV
>>789
いまさらVBAのバックボーンまで理解するメリットがあるかどうかは疑問だけどな
理解しようとしてるなら良いし、古い言語だしそう言うもんだと割り切るならそれはそれでよいんじゃない

VBAの言語仕様に文句あるならさっさと別の言語使えば良いだけの話
カオスなのはVBAでも俺の思う仕様でプログラミングしないと気が済まないって奴が暴れるからだよ
0791デフォルトの名無しさん2016/03/22(火) 22:56:31.81ID:9n/g/Em0
またC++か
0792デフォルトの名無しさん2016/03/22(火) 23:07:04.74ID:dJvZYtfq
>>790
お前もよく分かってないやつだな
なんで急にVBAのバックボーンなんて大げさな話になるんだよ
今の流れでバックボーン言ったらローカルスタティックが存在する理由だろ
それが分からずに初期化云々を話しても無駄だって事だよ
2フェーズコミットとか亜空間からのトンデモキーワードまで飛び出す始末だぞw
■ このスレッドは過去ログ倉庫に格納されています