2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

Excel VBA 質問スレ Part45

1 :デフォルトの名無しさん:2017/01/03(火) 02:51:16.56 ID:9Y8iTik6.net
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK

※前スレ
Excel VBA 質問スレ Part44
http://echo.2ch.net/test/read.cgi/tech/1479421482/


※関連スレ
VBAなんでも質問スレ Part2
http://echo.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://echo.2ch.net/test/read.cgi/tech/1328536426/
Excel総合相談所 125
http://echo.2ch.net/test/read.cgi/bsoft/1481369538/

2 :デフォルトの名無しさん:2017/01/04(水) 23:43:25.46 ID:T2t87YWx.net
スレ生きてるかな?

3 :デフォルトの名無しさん:2017/01/05(木) 01:36:19.20 ID:3zitFiAl.net
エクセルVBAのオススメ参考書とか教えて下さいませ

4 :デフォルトの名無しさん:2017/01/05(木) 16:31:19.34 ID:rordfoes.net
おちるぞー

5 :デフォルトの名無しさん:2017/01/05(木) 17:49:33.10 ID:3kVSXnTB.net
>>3
Office TANAKA

6 :デフォルトの名無しさん:2017/01/05(木) 19:15:59.64 ID:YlAAgZIP.net
落ちたら落ちたでまた立てればいいのよ

7 :デフォルトの名無しさん:2017/01/05(木) 21:50:17.01 ID:PrUsv/Jo.net
excel関数のoffsetやsumifを多用してたせいでマクロ遅くなるなんて知らんかった
マクロ実行中も再計算してるのか

8 :デフォルトの名無しさん:2017/01/05(木) 21:53:00.56 ID:EGC2o4Lu.net
>>7
計算止めてマクロ実行し終わるときに再計算させるんじゃダメなの?

9 :デフォルトの名無しさん:2017/01/05(木) 22:36:04.40 ID:fbqYOVIL.net
>>3
Me.Thread

10 :デフォルトの名無しさん:2017/01/05(木) 22:50:47.05 ID:olwzS93J.net
どんな言語でもそうだけど、それ単体で覚えるって無理だよな。

11 :デフォルトの名無しさん:2017/01/05(木) 23:06:24.30 ID:fbqYOVIL.net
ていうかVBAって、
半分くらいは、神エクセルを作るクソ上司対策の為にあるようなもんだけどな。

12 :デフォルトの名無しさん:2017/01/06(金) 00:22:50.70 ID:m+Jpe1FL.net
>>7
作り終わったら描画と計算止めるのは速度上げたいならマストだぞ

13 :デフォルトの名無しさん:2017/01/06(金) 00:32:13.04 ID:yTw61UwJ.net
>>3
レベルによると思います。
マクロ少しはつかえるのか、全くダメだけどExcelは得意(関数、機能など)だとか、関数もよく分からんとか。
IF関数もよく分からないレベルだと、まずはExcelの関数(ワークシート関数)と、機能(条件付き書式とか、テーブルとか)をある程度勉強した方がいい。

14 :デフォルトの名無しさん:2017/01/06(金) 19:20:32.03 ID:Eygm90s9.net
新年早々質問いきます!
選択している写真の存在するセル領域Rangeを取得したいと思っています。
ところが、セルピッタリの位置に写真を配置(Alt+写真ドラッグ・Alt+拡大縮小)した場合に、特定のサイズの時に1セル余分に取得してしまう事が分かりました。
正確にRangeを取得できるように直したいのですが、何か良いアイディアを頂けないでしょうか。

'現在選択している写真の領域Rangeを選択状態にするテスト
Sub SelectShapeRangeTest()
Dim SP As Shape
For Each SP In Selection.Parent.Shapes
If SP.Name = Selection.Name Then Exit For
Next
Range(SP.TopLeftCell, SP.BottomRightCell).Select
End Sub

15 :デフォルトの名無しさん:2017/01/06(金) 19:32:50.62 ID:5HA7V59p.net
>>14
Rangeを選択してその大きさにShapeのサイズを変える

16 :デフォルトの名無しさん:2017/01/06(金) 19:50:55.68 ID:5HA7V59p.net
>>14
Rangeが大きくなった事を判定してRangeを小さくするとか
大きくなったRangeに合うようにShapeを移動する
例えばRangeの中心とShapeの中心が重なるようにとか


全てのShapeを同じ大きさにするとか

シートにシェイプは1つだけにしてシートの左上とシェイプの左上を合わせるとか

17 :デフォルトの名無しさん:2017/01/06(金) 19:54:21.08 ID:ylhkczHt.net
>>15
スマホから、主です。
回答ありがとうございます。

たしかにこれから写真を貼るのであれば、その方法で解決すると思いますが、あくまで既に配置済みの写真から読み取る必要が有るんです。

上記はテストコードなのでセレクトしていますが、これを関数化して膨大な配置済みの写真からそれぞれのrangeを取り出すのが最終目標なので。

18 :デフォルトの名無しさん:2017/01/06(金) 21:04:04.05 ID:S2R5Pk4v.net
>>17
どうせギリギリのところで次のセルに被ってるんだろ
対象のシェイプより少しだけ小さいシェイプおいて取得すりゃいいんじゃね?

19 :デフォルトの名無しさん:2017/01/06(金) 21:54:38.99 ID:Q5cZMFD3.net
>>14
vbaでオラが画像を貼る時は
デフォのセルの左上を基準にするだけで
セルをはみ出そうが、画と画が被ろうが、複数枚貼っていく

その時、画像のセル位置はセーブしてるし
shapes.nameを一意に付けておくので
後でサイズ変更したり削除したり、、操作は自在なのだが

20 :デフォルトの名無しさん:2017/01/06(金) 23:58:00.16 ID:8yYsxO6K.net
初めてお伺いさせていただくんですが、

マクロでvlookupを使いたいと思っているのですがエラーしか返ってこず途方にくれています。。
=VLOOKUP(D8,データ欄!$C$9:$D$28,2,FALSE)
D8にはユーザーフォームで入力した品目名が出力されており、それに呼応するIDがデータ欄!C9:D28に記載されており、
E8にIDを出力したいと考えています。

ヒントでも頂ければ幸甚に存じます。

21 :デフォルトの名無しさん:2017/01/07(土) 00:25:21.43 ID:LrFag0bm.net
それ、マクロの問題なんですかね??
vlookup関数でエラーが出てるの?

22 :デフォルトの名無しさん:2017/01/07(土) 00:30:28.46 ID:2J+LIFNT.net
>>12
途中でエラーが出て、アレっ?となる罠付きだけどな。

23 :デフォルトの名無しさん:2017/01/07(土) 00:37:52.01 ID:2J+LIFNT.net
>>20
Cells(1,1).Value="=VLOOKUP(D8,データ欄!$C$9:$D$28,2,FALSE)"なのか?
WorksheetFunction.VLookupなのか?
実行時エラーなのか?
#N/Aなのか?

何となく、余計な改行コードが入っているとか、
数字の123と文字の123を比較してるとか、
そんな罠のような気がするけど。

24 :デフォルトの名無しさん:2017/01/07(土) 00:48:37.10 ID:CI9p857v.net
>>20
面倒くさいからこれ貼っとくわ
http://www.relief.jp/itnote/archives/excel-vba-error-trap-vlookup-function.php

25 :デフォルトの名無しさん:2017/01/07(土) 00:49:41.86 ID:TOrGuStJ.net
自分の解釈をできるだけ排除して
事実だけを伝えた方がいい時もある

エラーと言っているが画面に表示される文字列やダイアログは何なのか
どんなタイミングで表示されるのか
自分が書いたコードはどんなものか

26 :デフォルトの名無しさん:2017/01/07(土) 00:51:23.73 ID:LrFag0bm.net
ファイル上げてくれると、分かりやすいんだけどね。

27 :デフォルトの名無しさん:2017/01/07(土) 00:55:21.10 ID:CI9p857v.net
まさかエクセルの関数をそのまま書いてるとかじゃないやろな

28 :デフォルトの名無しさん:2017/01/07(土) 09:02:21.49 ID:Xo1hV6SK.net
>>22
作り終わるってのはテストも込みでだぞ

29 :デフォルトの名無しさん:2017/01/07(土) 23:07:08.30 ID:so7B4l6a.net
>>20は解決したのかな?

30 :デフォルトの名無しさん:2017/01/07(土) 23:55:04.69 ID:5WVocSaL.net
すいません
とあるセルに入力するとvbaが実行するようにしてるのですが
コードに間違いがあるとエラーがでて終了を押すとまたセルに入力してもvbaが実行されなくなります (MsgBoxで確認してます)
実行メニューのリセットを押しても同じです
ファイルを開き直してもダメでexcelを再起動するとまた動くのですが再起動せずにする方法ってありますか?

excel 2016 win7です

31 :30:2017/01/08(日) 00:49:37.29 ID:r1ASQ1zZ.net
追記で動かなくなるのはそのWorkbook_SheetChange だけで
ボタンからsubの実行は動くようです

32 :デフォルトの名無しさん:2017/01/08(日) 00:52:16.58 ID:mMTwBd0e.net
>>30
もしかして
Application.EnableEvents = False
とかしてて その後 実行時エラーが出て Trueに戻せてないとかじゃね?
On Error
でエラートラップして Trueに戻すようにしないと

33 :デフォルトの名無しさん:2017/01/08(日) 12:37:54.44 ID:C9GVPqMv.net
てかコードの間違いを直せよ...

34 :デフォルトの名無しさん:2017/01/08(日) 14:23:39.68 ID:aANViJyG.net
>>33
まさにこれだが
デバッグモードにして止めてみろって

35 :30:2017/01/08(日) 14:39:47.53 ID:r1ASQ1zZ.net
>>32
それが原因だったようです
ありがとうございますm(__)m

>>33-34
デバックモードよく分かってません
勉強してみます

36 :デフォルトの名無しさん:2017/01/08(日) 21:58:52.89 ID:LSCp0tLP.net
超初心者の質問です。

A行(A5〜Aずっと下まで)に「食物」が入力されていると仮定して、
B行が一行上の値と違う場合、
一行上に行を挿入して、その行に「果物」と入れたいです。

B行に入る値
・みかん
・バナナ

Sub 入力
一番上 = 5
一番下 = Cells(Row.Count,1).End(xlup).Row
For Cnt = 一番上 To 一番下
If Cells(Cnt,1)="りんご"
If Cells(Cnt-1,2)<> cells(Cnt,2) then
If cells(Cnt,2)="みかん" or Cells (Cnt, 2) ="バナナ" Then
Range(Cells(Cnt,1),Cells(Cnt,2)).Insert
End If
End If
End If
Next Cnt

本来は「みかん」と「バナナ」をまとめて、その上に「果物」の見出しをつけたいのに、
このコードだと「みかん」と「バナナ」のそれぞれ一行上に行が入ってしまいます。
どうしたら、まとめて一行だけ挿入することが出来るでしょうか?

37 :デフォルトの名無しさん:2017/01/08(日) 22:25:17.31 ID:KINgQhrq.net
>>36
俺が困るので先に言っとく
『行』とは横のことを指す(左の数字)
縦を指すときは『列』と呼ぶ(上の英字)

そこをふまえて
>B列が1行上の値と違う場合、1行上に行を挿入して、その行に「果物」と入れたい
と言う条件と
>「みかん」と「バナナ」のそれぞれ1行上に行が入ってしまいます。
と言う結果は整合性のある状態なので問題はないと思う

もしも望む結果ではないのであればまず

 >B列が1行上の値と違う場合、

を見直すことが必要
やりたい内容を鑑みれば

 B列に入力があり、1行上の値が空白である場合、

と変えればいいと思う

38 :デフォルトの名無しさん:2017/01/08(日) 22:42:31.86 ID:LSCp0tLP.net
>>37
そうですね、表現の仕方が間違っておりました。

フォーマットがもう決まってしまっているので、これで何とかしたいんですよね・・・。
どうしても、「みかん」「バナナ」をまとめて、一行上に行を挿入したいのですが。
今、思いついたのは、「みかん」「バナナ」にそれぞれ行が入ってしまうことは承知で、
「果物_01」「果物_02」と連番になるように設定して(やり方は分かっていないです)
それで_02の行は削除するというifを組んで、
さらに「果物_01」の行は「01」の部分を省くコードを書けばいいかな、と思ったりもしますが、
効率が悪いでしょうか?(やり方は分かっていないです、ただ思いつき)

39 :デフォルトの名無しさん:2017/01/08(日) 22:49:26.11 ID:KINgQhrq.net
>>38
条件を変えればいいと思う

A列(A5〜Aずっと下まで)に「食物」が入力されていると仮定して、
B列が1行上の値と違う場合、
1行上に行を挿入して、その行に「果物」と入れたい

A行(A5〜Aずっと下まで)に「食物」が入力されていると仮定して、
B列に入力があり、1行上の値が空白である場合、
1行上に行を挿入して、その行に「果物」と入れたい

40 :デフォルトの名無しさん:2017/01/08(日) 23:15:02.67 ID:LSCp0tLP.net
>>39
なるほど、そういう発想もありますね。
でもそうなると、どういうコードになるのでしょうか??(・・?)

41 :デフォルトの名無しさん:2017/01/09(月) 00:15:41.73 ID:t+szxcoe.net
すごい、エスパーがいるな
ちょっと日本語が意味わからないからアドバイス出来ないわ…

42 :デフォルトの名無しさん:2017/01/09(月) 00:55:08.08 ID:4/AW5Uyc.net
>>36
A列は全て 「食物」が入力されているのよね

B列にどのように入ってるの?

>B行に入る値
>・みかん
>・バナナ

これ以外は無い(すなわち空セル)って事?
コード見ると「りんご」 ってあるみたいだけど???

んで どのような結果を お望み?

43 :デフォルトの名無しさん:2017/01/09(月) 00:58:47.84 ID:5IQR8Haa.net
それって、

分類1
商品1
商品2
分類2
商品3
商品4

みたいなフォーマットなの?
もしそうなら、それは神エクセルだから、

>フォーマットがもう決まってしまっているので

そこをどうにかして、こう直したほうがいいと思うけど。

分類名 商品名
分類1  商品1
分類2  商品2

44 :デフォルトの名無しさん:2017/01/09(月) 01:00:35.84 ID:5IQR8Haa.net
違う、こうか。

分類名 商品名
分類1  商品1
分類1  商品2
分類2  商品3
分類2  商品4

45 :デフォルトの名無しさん:2017/01/09(月) 02:56:04.77 ID:JlqgPD3/.net
すみません、割り込みなのですが簡単な質問なので失礼します((+_+))


コマンドボタンを1回クリックするごとにラベルに100ごと加算される物を
作りたいのですが、↓だと、あたりまえですが1度クリックしかできません。


Private Sub CommandButton1_Click()
x = 100
Label1.Caption = x

End Sub

46 :デフォルトの名無しさん:2017/01/09(月) 03:13:17.25 ID:4/AW5Uyc.net
>>45
コマンドボタンとラベルは ユーザフォーム上なの? シート上なの?

どちらでも良い方法として

ラベルのプロパティ開いて Captionを 0 にしておく
その上で
Private Sub CommandButton1_Click()
 Label1.Caption = Label1.Caption + 100
End Sub

47 :デフォルトの名無しさん:2017/01/09(月) 03:24:27.93 ID:JlqgPD3/.net
>>46
ユーザーフォーム上です!ありがとうございました、無事できました!

48 :デフォルトの名無しさん:2017/01/09(月) 04:07:15.85 ID:JlqgPD3/.net
何度もすみません、45の者です。
45の続きで、ラベル1の値ーラベル2の値=差の値をラベル3に表示する
計算機をユーザーフォーム上に作りたいと思っています。
しかし以下ではエラー「一致する型がありません」とでます。
なぜなのでしょうか(T_T)


Private Sub CommandButton3_Click()
Label1.Caption = x '投入した金額
Label2.Caption = y '選択した金額

k = x - y

Label3.Caption = k

End Sub
-----------------
Private Sub CommandButton1_Click()
 Label1.Caption = Label1.Caption + 100 ←ここにエラ―がでる
End Sub
------------------
Private Sub CommandButton2_Click()
 Label2.Caption = Label2.Caption + 50
End Sub

49 :デフォルトの名無しさん:2017/01/09(月) 04:23:14.16 ID:4/AW5Uyc.net
>>48

>>46 を良く嫁
以上

50 :デフォルトの名無しさん:2017/01/09(月) 10:17:57.42 ID:EPA1tS/m.net
>>48
引き算するとこのx,yの代入逆だろ
x=ラベルキャプションってしないとなんも価入らんぞ
あとちゃんと変数は宣言してる?

51 :デフォルトの名無しさん:2017/01/09(月) 10:41:01.31 ID:HU0Vv46x.net
>>46
>ラベルのプロパティ開いて Captionを 0 にしておく

は前提として、プロパティを直接の演算の対象にするとダメなことはまれに経験したことがある
理由はわからないけど
そういう時は、変数をかまして回避した。たとえば、

Private Sub CommandButton1_Click()
Dim label1_c As Integer
label1_c = Label1.Caption
label1_c = label1_c + 100
 Label1.Caption = label1_c
End Sub

52 :デフォルトの名無しさん:2017/01/09(月) 13:48:59.41 ID:O0/XMIqD.net
シート1の表(2次元領域)をシート2やシート3に一行に横一列にコピーしたいのですが、
一旦シート1の表の値を変数ATAI(i)に入れて、シート2や3にコピーしてます。
また別の方法で直でシート1.COPY シート2でもコピーしてみました。

両方ともコピーするのが2万個ぐらいあるのですが、処理に3分ぐらいかかります。
もっと早くする方法はありますか?

53 :デフォルトの名無しさん:2017/01/09(月) 13:50:27.27 ID:JSUf7hDg.net
>>12
エラーで中断したら再計算しないけどな

54 :デフォルトの名無しさん:2017/01/09(月) 14:36:04.75 ID:SVvcq0Ni.net
下記のコードでObjectにするとSheet1のaを呼び出せるのですが
WSだとメソッドまたはデータメンバーが見つかりませんになってしまいます
wsの方か厳密のような気がするのですがObjectで正解なんでしょうか?

ThisWorkbook
Dim ws As Worksheet ' Objectにすると成功
Set ws = Sheets("Sheet1")

Call ws.a() ' エラー


Sheet1
Sub a()
End Sub

55 :デフォルトの名無しさん:2017/01/09(月) 14:36:23.83 ID:EPA1tS/m.net
>>52
Dim rng as Range
set rng = Range(元データ開始セル,元データ終了セル)
Range(貼り付け先開始セル,貼り付け先終了セル) = rng
って感じでやると早くない?
もしかしたらvariant型の変数にした方が早いかもしれんけど
OfficeTANAKAに高速化テクニックって感じで載ってるよ

56 :デフォルトの名無しさん:2017/01/09(月) 14:37:11.58 ID:EPA1tS/m.net
>>53
あのな?「作り終わったら」ってどういう意味かわかるか?

57 :デフォルトの名無しさん:2017/01/09(月) 14:51:56.79 ID:4FVlGxEy.net
>>54
目的に合致してれば
問題ないです

58 :デフォルトの名無しさん:2017/01/09(月) 15:00:52.77 ID:cjVtQucR.net
>>54
Sheet1.NameがSheet1じゃないのかも

59 :54:2017/01/09(月) 15:30:22.93 ID:SVvcq0Ni.net
もう一個謎が

Workbook_SheetChange(ByVal ws As Object, ...

Call ws.a() ' エラー
Call Sheets(ws.Name).a() ' 成功

となり訳が分かりません...

>>57
理解できてないとなにか気持ち悪いです
>>58
同じにしてあります;;

セルやらシートがあるのでvbaってjsやpyより難しい気がします
basicの構文も癖があるし・・

60 :デフォルトの名無しさん:2017/01/09(月) 16:49:38.66 ID:dWF3ZE3B.net
>basicの構文も癖があるし・・
www

61 :デフォルトの名無しさん:2017/01/09(月) 16:53:01.88 ID:6xa3UP1L.net
プロシージャをcallで呼び出すのと何も付けないで呼び出すのとでは何が違うのでしょうか?
後者だと参照渡しになりませんでしたが。

62 :デフォルトの名無しさん:2017/01/09(月) 16:53:39.75 ID:I9s0ZByk.net
>>59
他の人が追試出来るように端折らないコード乗せて。

63 :デフォルトの名無しさん:2017/01/09(月) 16:57:16.33 ID:6xa3UP1L.net
もうわかったのでいいですすいません

64 :デフォルトの名無しさん:2017/01/09(月) 17:21:48.98 ID:EPA1tS/m.net
>>63
解決したならそれをのせろや

65 :デフォルトの名無しさん:2017/01/09(月) 17:22:57.78 ID:SVvcq0Ni.net
>>62
新規の空ファイルで

ThisWorkbook
Private Sub Workbook_SheetChange(ByVal sh As Object, ByVal Target As Range)
Call sh.test
'Call Sheets(sh.Name).test
End Sub

Sheet1
Sub test()
MsgBox "テスト"
End Sub

66 :デフォルトの名無しさん:2017/01/09(月) 18:15:14.29 ID:Z/GXP5pv.net
>>65
sh.Name="Sheet1"
を確認しないとダメな気がする

67 :デフォルトの名無しさん:2017/01/09(月) 18:21:35.53 ID:Z/GXP5pv.net
>>66
動的にイベントが発生するまでシートを確定できないからコンパイルでエラーになるみたいだよ

68 :デフォルトの名無しさん:2017/01/09(月) 18:23:08.68 ID:Z/GXP5pv.net
オブジェクト名でSheet1.testとすればコンパイルも通るし実行時エラーも出ない

69 :デフォルトの名無しさん:2017/01/09(月) 18:39:16.88 ID:SVvcq0Ni.net
>>66-68
ありがとうございますm(__)m
VBAはコンパイラだったのですね
納得しました

70 :デフォルトの名無しさん:2017/01/09(月) 18:56:01.43 ID:jLw81RF+.net
>>61
厳密にいうと参照渡しになっている。
変数aをカッコで囲んで(a)とすると、aのコピーが一時オブジェクトとして作られ、それがプロシージャに渡されるので、
元の変数aそのものはプロシージャに渡らない。

プロシージャ a

Call プロシージャ(a)
が等価で、

プロシージャ (a)

Call プロシージャ((a))
と等価になる

71 :デフォルトの名無しさん:2017/01/09(月) 19:32:58.81 ID:6xa3UP1L.net
>>70
カッコにそういう意味があったとは・・・!
わかりやすかったです、ありがとうございました。

72 :デフォルトの名無しさん:2017/01/09(月) 22:18:09.21 ID:vYvrwg8z.net
>VBAはコンパイラだったのですね

えっ

73 :デフォルトの名無しさん:2017/01/09(月) 22:32:30.71 ID:o7+xqhMd.net
>>42-44
分かりづらく失礼しました。
途中のりんごは不要です。
また、B列には他の食べ物が入りますが、ここでは果物に分類されないので、省略しました。

Sub 入力
一番上 = 5
一番下 = Cells(Row.Count,1).End(xlup).Row
For Cnt = 一番上 To 一番下
If Cells(Cnt,1)="食物"
If Cells(Cnt-1,2)<> cells(Cnt,2) then
If cells(Cnt,2)="みかん" or Cells (Cnt, 2) ="バナナ" Then
Range(Cells(Cnt,1),Cells(Cnt,2)).Insert
End If
End If
End If
Next Cnt

74 :デフォルトの名無しさん:2017/01/09(月) 22:32:55.53 ID:o7+xqhMd.net
で、希望するフォーマットとしては

 果物
食物バナナ
食物みかん
食物その他(仮)



としたいわけです。ところが、自分の作ったシートだと

 果物
食物バナナ
 果物
食物みかん
食物


となってしまうわけです。これで分かりやすくなったでしょうか・・・

75 :デフォルトの名無しさん:2017/01/09(月) 22:40:49.82 ID:LQfxW/qY.net
馬鹿ばっかで頭が痛くなるスレだ

76 :デフォルトの名無しさん:2017/01/09(月) 22:45:04.08 ID:O0/XMIqD.net
>>55 ありがとう。 結局いろいろ試しましたが、セルに関数貼りつけました・・・・。
手動でセルに関数貼りつけたほうが早かったです・・・。

77 :デフォルトの名無しさん:2017/01/09(月) 23:29:23.35 ID:4/AW5Uyc.net
>>74
やりたい事こんな感じ?
※なお 区別する種類が多いとこの手法は結構大変なので
考え直さないとだけど

Sub 入力()
一番上 = 5
一番下 = Cells(Rows.Count, 1).End(xlUp).Row

'下から上に処理してく
For cnt = 一番下 To 一番上 Step -1

 'cnt行の品名
 品名1 = Cells(cnt, 2).Value
 'cnt行の一つ上の品名
 If cnt <> 一番上 Then
  品名2 = Cells(cnt - 1, 2).Value
  Else
  品名2 = ""
 End If

 '行挿入
 If 品名1 = "みかん" Or 品名1 = "バナナ" Then
 If 品名2 <> "みかん" And 品名2 <> "バナナ" Then
  Range(Cells(cnt, 1), Cells(cnt, 2)).Insert
  Cells(cnt, 2) = "果物"
 End If
 End If
Next
End Sub

78 :デフォルトの名無しさん:2017/01/09(月) 23:32:51.18 ID:cjVtQucR.net
>>72
メニューにコンパイルってあるけど

79 :デフォルトの名無しさん:2017/01/09(月) 23:43:50.55 ID:dVuv1+mu.net
>>76
んー
二万件あっても直接レンジでやり取りすればそんな時間かからんと思うけどな
まあいいや、解決したなら乙だ

80 :デフォルトの名無しさん:2017/01/09(月) 23:47:23.09 ID:SFPxoHKZ.net
>>74
本当はVBA必要ないのに、
神エクセルを作ることによって、
VBAが必要になってしまっているのではないか?

果物・・・食べ物の種類
バナナ・・・果物
みかん・・・果物

項目以外で、違うものを同じ列に入れる?

81 :デフォルトの名無しさん:2017/01/10(火) 00:09:16.68 ID:hjeg5IZ9.net
食物が列にあって果物を見出しにする謎を解決しないと先に進まないんじゃないか

82 :デフォルトの名無しさん:2017/01/10(火) 10:38:11.72 ID:yHxqwlUe.net
>>18
大変遅くなりました。
>「元の画像より少し小さいシェイプを作成して取得する」
はなかなかの妙案だと思いましたが、関数化してループさせた場合処理速度に問題があったので、
既存のプロパティを自力で補正するように書き換えてみました。
Excelは左上をセルの左上に合わせて配置しても、画像の右下のグリップで拡大した場合、
低確率で.Topと.Leftの値が微妙に変化する(たとえば C3に置いた写真の.Top=37.5が37.4999...に変わってしまう。)
ようなので、何パターンか検証した結果、小数点以下第三位を四捨五入で正確に出る事がわかりました。

手動配置している場合に余裕を持たせられるようデフォルト値付きの省略可能引数にしています。

Sub TestGetShapeToRange()
Dim SP As Shape
For Each SP In Selection.Parent.Shapes
If SP.Name = Selection.Name Then Exit For
Next
Range(GetTopLeftCell(SP), GetBottomRightCell(SP)).Select
End Sub

長すぎと怒られたので 次レスへ

83 :デフォルトの名無しさん:2017/01/10(火) 10:38:44.28 ID:yHxqwlUe.net
>>82 の続き
'Shape.TopLeftCellの誤差補正後の左上セルを取得する関数
Public Function GetTopLeftCell(SP As Shape, Optional num_digits As Integer = 2) As Range
Set GetTopLeftCell = SP.TopLeftCell
If GetTopLeftCell.Offset(1).Top <= Round(SP.Top, num_digits) Then
Set GetTopLeftCell = GetTopLeftCell.Offset(1)
End If
If GetTopLeftCell.Offset(, 1).Left <= Round(SP.Left, num_digits) Then
Set GetTopLeftCell = GetTopLeftCell.Offset(, 1)
End If
End Function

'Shape.BottomRightCellの誤差補正後の右下セルを取得する関数
Public Function GetBottomRightCell(SP As Shape, Optional num_digits As Integer = 2) As Range
Set GetBottomRightCell = SP.BottomRightCell
If GetBottomRightCell.Top >= Round(SP.Top + SP.Height, num_digits) Then
Set GetBottomRightCell = GetBottomRightCell.Offset(-1)
End If
If GetBottomRightCell.Left >= Round(SP.Left + SP.Width, num_digits) Then
Set GetBottomRightCell = GetBottomRightCell.Offset(, -1)
End If
End Function

以上、ご報告まで。

84 :デフォルトの名無しさん:2017/01/10(火) 12:02:57.55 ID:yHxqwlUe.net
連投すいません。次の質問です。

以下のようなマクロがあります。
1.非モーダルのユーザーフォーム(fm)が常駐
2.ユーザーが任意で複数の画像を選択
3.fm上のボタンをユーザーがクリックして下記のような処理を実行
For each obj in Selection
obj.cut
ActiveSheet.PasteSpecial Format:="図 (JPEG)"
Next
すると、最後にPasteしたShapeを選択した状態でマクロが終了します。

ESCを押して選択を解除するような操作をVBAで再現するにはどうしたら良いのでしょうか。

・マクロの記録では、ESCでShapeの解除は記録されませんでした。
・Application.SendKeys "{ESC}"を試してみたのですが、反応がありませんでした。
・ユーザーフォームにフォーカスが取られているのかと思いActiveWorkbook.ActivateやActiveWindow.Activateを入れたのですが無反応でした。

強引な解決策を考えましたが、もっとスマートな方法が無いかと探しています。
・終了後に適当なRangeをSelectしてからScrollRow/ScrollColumnして元の位置に戻す。
・シートのSelectionイベントで直前までに選択されたRangeを保持する。

ご教示のほどよろしくお願い致します。

85 :デフォルトの名無しさん:2017/01/10(火) 15:45:40.53 ID:8VGVrhFD.net
>>84
君の思う スマートな方法が どんなものだかは分らんが

どこかのセルを選択するのが一番簡単だと思う
適当なセルだとスクロールしてしまうのがイヤなら

・選択されてるShapeの右上のセルを選択
・画面上の左上のセルを選択
とかでいいんじゃね?

86 :85:2017/01/10(火) 15:47:43.23 ID:8VGVrhFD.net
間違った
× ・選択されてるShapeの右上のセルを選択
○ ・選択されてるShapeの左上のセルを選択

87 :デフォルトの名無しさん:2017/01/10(火) 17:40:05.82 ID:yHxqwlUe.net
>>85
とりあえずは、表示画面の左上セルをSelectするようにしたいと思います。
>スマートな方法
いわゆるobj.Unselect()メソッドとか、obj.Select(false)のような選択解除専用の機能は無いか。という事です。
Excel VBAって思わぬオブジェクトに実装されていたりするので・・・

88 :デフォルトの名無しさん:2017/01/11(水) 08:57:05.13 ID:J0hUcFsW.net
マクロでなく操作で非選択って出来る?
結局は別のものを選択してるよね

89 :デフォルトの名無しさん:2017/01/11(水) 09:00:21.43 ID:v+irSj+y.net
>>87
プロパティ的なもんはオブジェクトブラウザかなんかで調べれば出てくるんじゃないの

90 :デフォルトの名無しさん:2017/01/11(水) 12:03:53.06 ID:tc1gJPs0.net
自動で名前を付けて保存したくて、いろいろ調べて形にはなったのですが

A1に日付が2017/01/11と入ってる場合
そのセルを引用したらスラッシュも入ってしまい保存の時にいちいち消すのに困っています。
保存の時にだけスラッシュを消す方法有りませんか?

91 :デフォルトの名無しさん:2017/01/11(水) 12:12:47.07 ID:p4WB0UzK.net
>>90
format

92 :デフォルトの名無しさん:2017/01/11(水) 12:31:15.82 ID:tc1gJPs0.net
InitialFilename:=Format(Range("A1"), "yyyymmdd")

このような形でいいのでしょうか?

93 :デフォルトの名無しさん:2017/01/11(水) 12:34:16.38 ID:I7PY9KYr.net
うちの会社ではほぼ全PCをシンクライアントにしてからというものの
ExcelVBAのマクロを保存してた「PERSONAL.XLSB」が使えなくなりました。
シンクライアントでは「PERSONAL.XLSB」に相当する機能を使用するにはどうしますか?

あとこれが本題なのですが
OutlookとWordも、それらのVBAをデフォルト的個人ファイルに保存して高頻度で使用していました。
特にOutlookのVBAでは便利なマクロを作っていました。
シンクライアントでもそれらの機能を使用するにはどうしますか?

94 :デフォルトの名無しさん:2017/01/11(水) 12:35:59.27 ID:p4WB0UzK.net
指定の位置に日付が入ってるのであればそれでよいはず

95 :デフォルトの名無しさん:2017/01/11(水) 12:38:17.27 ID:tc1gJPs0.net
>>94
ご丁寧にありがとうございます!

96 :デフォルトの名無しさん:2017/01/11(水) 12:48:03.28 ID:p4WB0UzK.net
>>93
単純に移行すれば使えると思う
以前使ってたpersonal.xlsbを所定の位置に配置すればできるはず

97 :デフォルトの名無しさん:2017/01/11(水) 12:50:26.58 ID:I7PY9KYr.net
>>96
シンクライアントでは普通の方法ではCドライブが見えないんです。
別の方法で見つけてそこに入れても、次の日にPCを起動したときにそのファイルは消えてしまっているから
わざわざファイルを移動する方法では無駄になってしまうんです。毎日する必要になるから面倒で。

98 :デフォルトの名無しさん:2017/01/11(水) 12:53:38.45 ID:xxQxfc5N.net
>>97
会社のシステム担当者に聞けばいいよ

99 :デフォルトの名無しさん:2017/01/11(水) 13:08:46.29 ID:uU4tfKci.net
シンクライアントは勝手なことをできないように導入する目的もあるので
自分なりのカスタマイズはあきらめるしかない場合がほとんど

100 :デフォルトの名無しさん:2017/01/11(水) 13:08:59.59 ID:I7PY9KYr.net
>>98
どこにその部署があるかわからないし
勝手にツール作らないでくださいといわれてそれを禁止されるリスクもあるから
自分の力で解決したいのですが。

101 :デフォルトの名無しさん:2017/01/11(水) 13:15:26.49 ID:I7PY9KYr.net
Windowsのスタートアップもシンクライアントになって以来使えません(毎回PC起動時にはここは空になります)。
どうすればシンクライアントでもスタートアップ機能を使えるでしょうか?

102 :デフォルトの名無しさん:2017/01/11(水) 13:37:35.00 ID:f6yusNGM.net
>>101
管理者側で許可設定してもらわない限り、シンクラでカスタマイズは無理
そして許可はまず下りない
あきらめろ

103 :デフォルトの名無しさん:2017/01/11(水) 13:38:29.71 ID:uU4tfKci.net
完全にVBA無関係じゃん
スレチ

104 :デフォルトの名無しさん:2017/01/11(水) 13:38:35.27 ID:QIrTsKqr.net
>>101
板違い Windows板かパソコン一般板かPC初心者板へ

105 :デフォルトの名無しさん:2017/01/11(水) 13:45:44.75 ID:1bci6XNy.net
>>92
聞く前にやりなよそのくらいって思うんだが
1から10まで聞かないとなにもできないの?

106 :デフォルトの名無しさん:2017/01/11(水) 15:28:17.61 ID:qQgm92T6.net
ここはthinクライアントでCドライブに何か入れたいみたいな馬鹿が来るようなところだから

107 :デフォルトの名無しさん:2017/01/11(水) 18:57:51.34 ID:dcC69ZSQ.net
エクセルのメニュー、アイコン、リボン、などを初期設定状態に戻す方法はありませんか。

すみません初心者的

108 :デフォルトの名無しさん:2017/01/11(水) 19:28:32.74 ID:uU4tfKci.net
>>107
リセットボタンあるよ
http://www.helpforest.com/excel/1_book/img/ex010044_1.png

109 :デフォルトの名無しさん:2017/01/11(水) 20:14:53.64 ID:anvEc3zp.net
レジストリの該当部を削除すれば(それかリネームすれば)元に戻るよ。
と思ったらリセットボタンあるのか。そちらの方がいいですね。

110 :デフォルトの名無しさん:2017/01/11(水) 20:23:03.75 ID:1FwZUW9V.net
VBAのスレなんだからこんなの教えんなよ…

111 :デフォルトの名無しさん:2017/01/11(水) 22:54:27.23 ID:QIrTsKqr.net
スレチ質問もスレチ回答も荒らし

112 :デフォルトの名無しさん:2017/01/11(水) 23:23:15.83 ID:JMe0AUgT.net
>>90
まだこういう勘違いしている人がいるんだな・・
A1には2017/01/11と入ってるわけじゃない
42746という数字が入ってるだけ

113 :デフォルトの名無しさん:2017/01/12(木) 05:41:59.32 ID:nMoQZoqt.net
>>109
なんだこのアホな回答

114 :デフォルトの名無しさん:2017/01/12(木) 07:13:34.10 ID:0A4eRqXF.net
>>112
アスペ乙

115 :デフォルトの名無しさん:2017/01/12(木) 08:41:15.75 ID:Lhyp+MOo.net
>>112
[A1].Valueが 2017/01/11 なのです。

116 :デフォルトの名無しさん:2017/01/12(木) 09:48:23.99 ID:Rj8+4pg/.net
[A1].Textじゃなくて?

117 :デフォルトの名無しさん:2017/01/12(木) 11:56:09.07 ID:Cc5O9IhJ.net
お前の会社のことはお前の会社でなんとかしろよ

118 :デフォルトの名無しさん:2017/01/12(木) 12:29:26.83 ID:Lhyp+MOo.net
>>116
表示形式が yyyy/m/d だと Text は 2017/1/11

119 :デフォルトの名無しさん:2017/01/12(木) 12:45:45.01 ID:6ppTquF5.net
[A1].Value2と[A1].Formatが正常に定義されてるなら
あとはFormat関数で好きに取り出せるんじゃ無いかな

120 :デフォルトの名無しさん:2017/01/12(木) 20:01:33.08 ID:6fAXJ0U3.net
例え元のデータが何であっても「日付として解釈出来る形式」ならDate型に入れれば変換してくれるだろ。

121 :デフォルトの名無しさん:2017/01/12(木) 20:07:33.99 ID:yR99XFwh.net
で?っていう

122 :デフォルトの名無しさん:2017/01/12(木) 20:39:27.21 ID:UE8PLb8+.net
日付が数字で入ってるかどうかなんて質問に関係ないよな

123 :デフォルトの名無しさん:2017/01/12(木) 20:42:03.60 ID:eBGwra53.net
>>122
型によって処理が変わると思うのだが

124 :デフォルトの名無しさん:2017/01/12(木) 20:46:28.71 ID:UiBlAwbG.net
>>123
Date型の変数に入れれば日付になるじゃん

125 :デフォルトの名無しさん:2017/01/12(木) 20:54:08.91 ID:yR99XFwh.net
不勉強で申し訳ないが世に文字列以外のファイル名を採用したファイルシステムがあるのなら是非教えて頂きたい

126 :デフォルトの名無しさん:2017/01/12(木) 21:08:16.17 ID:eBGwra53.net
>>124
例えば
2017/1/12
20170112
1/12/2017
シリアル値
全部同じになるっけ?

127 :デフォルトの名無しさん:2017/01/12(木) 21:22:08.35 ID:UiBlAwbG.net
>>125
誰がそのまま使うって言ってんの
fileName = baseName & cStr(dte)
みたいな使い方するわけでしょ
>>126
知らんけど表示形式が違うだけならなるんじゃねえの

128 :デフォルトの名無しさん:2017/01/12(木) 22:11:57.92 ID:Mdtl8esZ.net
じゃ無いかな くれるだろ 思う 知らんけど じゃねえの
もはや、妄想・空想・予想のスレッドに成り果てたか
盆、暮れ、正月ぐらいせめて少しは頭を休ませてろ

129 :デフォルトの名無しさん:2017/01/12(木) 22:24:16.56 ID:URc2UNFw.net
あいてるセルにファイル名を生成する関数つくって、そのセル参照させればいいだけじゃないのけ?

保存場所どこにするかによってはスペースは使えないが。

130 :デフォルトの名無しさん:2017/01/12(木) 22:26:45.06 ID:VnxSw5mv.net
>>95で解決した話題がまだ続いてる

131 :デフォルトの名無しさん:2017/01/12(木) 22:40:44.11 ID:URc2UNFw.net
>>130
そうなんだ・・・しつれいした

132 :デフォルトの名無しさん:2017/01/12(木) 23:01:38.74 ID:Rj8+4pg/.net
>>125
大型機だとファイルには整数のID番号が付いてるだけでファイル名とは切り離されて管理されてるやつがあるな
だから同じ名前のファイルがいくつも作れてしまったりする

133 :デフォルトの名無しさん:2017/01/13(金) 12:38:07.17 ID:XGAIFzZi.net
Sheet1     Sheet2
A    B    A    B
東京  5    大阪   ○
大阪  4    福岡   ×
福岡  8    東京   ○

Sheet1
A    B   C
東京  5   ○
大阪  4   ○
福岡  8   ×

Sheet1のA列を軸にSheet2のB列の値を抽出する場合、
For〜 'Sheet1A列を順番に
 For〜 'Sheet2A列を順番に
  IF〜 'Sheet1C列に代入
 Next
Next
もしくは
For〜 'Sheet1A列を順番に
 Find.Row 'Sheet1A列の値を検索
 'Sheet1C列に代入
Next
どちらのほうが処理速度が向上しますか?

134 :デフォルトの名無しさん:2017/01/13(金) 12:39:52.43 ID:xEiCBlzV.net
>>133
vlookup

135 :デフォルトの名無しさん:2017/01/13(金) 12:43:08.31 ID:5NHpz1Ta.net
>>134
vlookup→配列に入れてif分岐→findの順番の早さ
findが遅いのは確か

136 :デフォルトの名無しさん:2017/01/13(金) 12:58:05.11 ID:dokIsM4J.net
>>133
シートでsql

137 :デフォルトの名無しさん:2017/01/13(金) 13:02:40.73 ID:5NHpz1Ta.net
findが遅いって言ってもセルを直接参照して処理するよりは早い

138 :デフォルトの名無しさん:2017/01/13(金) 13:15:44.54 ID:HxNmVQ/n.net
>>137
ってことは、後者のほうが速いということでしょうか?

139 :デフォルトの名無しさん:2017/01/13(金) 13:24:35.21 ID:Pq7AWenX.net
vlookup→配列に入れてif分岐→find→セルを直接参照してif分岐

140 :デフォルトの名無しさん:2017/01/13(金) 13:32:41.32 ID:q4yhPByZ.net
えっと、関数は使うつもりはありません
伝えてなくてすいません

141 :デフォルトの名無しさん:2017/01/13(金) 13:33:30.31 ID:q4yhPByZ.net
携帯回線のせいでIDがコロコロ変わる…
>>133です

142 :デフォルトの名無しさん:2017/01/13(金) 13:43:05.20 ID:xEiCBlzV.net
>>140
vbaにはWorksheetFunctionと言うクラスが用意されている
その中にvlookupと言うメソッドがあるのでそれを利用すればいかが?

これを使いたくないってことなら勘違いでごめんなさい

143 :デフォルトの名無しさん:2017/01/13(金) 13:58:35.74 ID:5NHpz1Ta.net
>>138
OfficeTANAKA 高速化テクニックでググれば幸せになれるよ

144 :デフォルトの名無しさん:2017/01/13(金) 17:01:55.73 ID:OhnPZwk7.net
ジャパネット・・・

145 :デフォルトの名無しさん:2017/01/13(金) 22:23:24.75 ID:N+jcCuX6.net
ていうか何行あるんだよ。
少なければWorksheetFunction.Vlookupで十分。
多ければ、高速VlookupかSQL。

146 :デフォルトの名無しさん:2017/01/13(金) 22:45:47.47 ID:IUqNU+pk.net
Sub test()
Dim d, e
Set d = CreateObject("Scripting.Dictionary")
Set e = CreateObject("Scripting.Dictionary")

For Each x In Range(Sheet1.Cells(1, 1), Sheet1.Cells(Rows.Count, 1).End(xlUp))
If Not d.exists(x.Value) Then d.add x.Value, x.Offset(0, 1).Value
Next

For Each x In Range(Sheet2.Cells(1, 1), Sheet2.Cells(Rows.Count, 1).End(xlUp))
If Not e.exists(x.Value) Then e.add x.Value, x.Offset(0, 1).Value
Next

For Each x In d.keys
Debug.Print x & ":" & d(x) & ":" & e(x)
Next
End Sub

147 :デフォルトの名無しさん:2017/01/14(土) 14:19:38.12 ID:eOx3RZdu.net
以下を実現するexcel vbaの書き方を教えてください。
お願いします。

セルA1に aaa

148 :デフォルトの名無しさん:2017/01/14(土) 14:20:50.66 ID:eOx3RZdu.net
以下を実現するexcel vbaの書き方を教えてください。
お願いします。

セルA1に aaa"bbbb"cc
セルA2に a"dd"cccc
という文字列があるとき、
セルB1に bbbb
セルB2に dd
(それぞれ、" "で挟まれた文字列)を出力する。

149 :デフォルトの名無しさん:2017/01/14(土) 14:28:13.29 ID:hMPeMSWC.net
>>148
split

150 :デフォルトの名無しさん:2017/01/14(土) 14:36:22.91 ID:l+bXNSZh.net
>>148
Sub Macro1()
  [B1] = Split([A1], """")(1)
  [B2] = Split([A2], """")(1)
End Sub

151 :デフォルトの名無しさん:2017/01/14(土) 14:59:32.62 ID:TCZ/fLWF.net
>>148
文字列関連の関数あらかた覚えなさい
難しくないから

152 :デフォルトの名無しさん:2017/01/15(日) 11:53:32.85 ID:ncM8p+KA.net
>>145
高速vlookupって何?

153 :デフォルトの名無しさん:2017/01/15(日) 12:46:48.76 ID:m2E/VbcR.net
このスレのテンプレにOfficeTANAKA入れたら質問激減しそう
ってレベルの質問が来るとガクッと来る

154 :デフォルトの名無しさん:2017/01/15(日) 14:21:19.63 ID:FqEOuXry.net
ガクッと来るのも自由、回答したくないなら回答しないのも自由
レベルの制限をしてるわけじゃなし

155 :デフォルトの名無しさん:2017/01/15(日) 14:36:53.95 ID:m2E/VbcR.net
>>154
まあそらそうなんだけども
ググった方が早くねって言うね

156 :デフォルトの名無しさん:2017/01/15(日) 18:05:40.34 ID:trUVIHlw.net
確かに「まずググれよ」と思う質問はたまにあるな。

検索の仕方も分からないような状態ならともかく、
このスレに書いてる単語を並べていけばたどり着くだろ的なのも多い。

ちゃんとしたサイトの方が図で説明してくれるから分かりやすいだろうし。

157 :デフォルトの名無しさん:2017/01/15(日) 19:40:36.26 ID:1Rt+ERT2.net
>>152
検索対象を昇順ソート
      ↓
VLOOKUPで1列目の文字を近似値一致検索
(但しA:Aとかは駄目で、A1:A500とかにする)
      ↓
検索で引っかかった文字が、
検索値と完全一致なら、
再度VLOOKUPで近似値一致検索


正直、何でこれで速くなるのかわからんし、
普通のVLOOKUPの検索アルゴリズムも、
最初からそうしろよって思う。

158 :デフォルトの名無しさん:2017/01/15(日) 21:24:21.25 ID:tflJaJ6v.net
>>157
とにかく完全一致検索が遅いから使いたくない、じゃどうするか
ってことなんででしょうね。

Office Tanakaの
http://officetanaka.net/excel/function/function/vlookup.htm
に「検索値が見つからないとき超えない最大値を返す仕様がとても助かる」とあるけど
検索値をはさむ[from, to]がわかるのが一番助かると思う。
(検索値が存在しない場合は、to < from)

159 :デフォルトの名無しさん:2017/01/16(月) 02:21:21.17 ID:vCWbmiBt.net
>>157
完全一致だとデータがソートされてる保証が無いから全件検索必須
近似値指定だとデータがソートされてる前提だから効率的に探せる
そいう事だろ、たぶん

160 :デフォルトの名無しさん:2017/01/16(月) 03:49:06.71 ID:L7GtxIZz.net
二分検索木とか知らん馬鹿ばっか

161 :デフォルトの名無しさん:2017/01/16(月) 05:39:23.40 ID:/FyYs0Da.net
>>160

馬鹿です。
Google先生に聞いたら「もしかして二分探索木?」と言われてしまいました。
これが高速Vlookupの原理?
WikiPediaで調べてみたのですがピンときません。
分かりやすい解説サイトでもあれば教えてください。
# 旧いMac(System7時代)のFileAllocationTableに B-Treeなんたら
というものがあったような、、関係あるのかな?

162 :デフォルトの名無しさん:2017/01/16(月) 05:48:43.71 ID:K1gRWFXI.net
ソート済のデータ検索なら バイナリサーチ(二分探索)じゃね?

163 :デフォルトの名無しさん:2017/01/16(月) 07:22:24.37 ID:Zl2rcSDP.net
>>160
木構造にはなっていないのでは?

164 :デフォルトの名無しさん:2017/01/16(月) 08:37:09.32 ID:6pMMhvrL.net
>>163
二分探索は別に木構造じゃなくても...
って書こうとしたら >>160 は「二分検索木」って書いてたのか
まあ検索でも間違いじゃないだろうけどあまり使わないような気がするな

165 :デフォルトの名無しさん:2017/01/16(月) 11:22:13.15 ID:q0YsoZyP.net
ソート済の二分探索なら100個の時7回ループ、500個なら9回、100万個でも20回ループすれば終わるから

166 :デフォルトの名無しさん:2017/01/16(月) 15:06:17.75 ID:CkU8X3ZM.net
30もない俺のシートじゃ意味なさそうやな

167 :デフォルトの名無しさん:2017/01/16(月) 23:26:54.44 ID:Py9dY2eU.net
ソート済でも完全一致が遅いのは何故?
一致するのを見つけたら、それ以上探さないで次に行けば、
近似値でも同じことじゃないかと思うんだけど。

168 :デフォルトの名無しさん:2017/01/16(月) 23:32:38.53 ID:Zl2rcSDP.net
>>167
ソート済かどうかなんてわからないから頭から舐めていく

169 :デフォルトの名無しさん:2017/01/17(火) 00:13:17.79 ID:HvycQCZc.net
>>168
一致するのが複数あっても、
どうせ1番上の1個しか拾ってこないんだから、
見つかった時点でループ抜けりゃいいじゃんって事なんだけど。

近似値だと探し方が違うの?

170 :デフォルトの名無しさん:2017/01/17(火) 00:17:50.89 ID:jzPK8o2C.net
>>169
いやだから頭から一つ一つ舐めていく必要があるかどうかの違い

171 :デフォルトの名無しさん:2017/01/17(火) 00:26:02.89 ID:Upzxz6/t.net
>>170
近似値だと頭から見なくてよいのはなんで
具体的にどうやってると考えてるの

172 :デフォルトの名無しさん:2017/01/17(火) 00:28:39.30 ID:jzPK8o2C.net
>>171
辞書で単語を引くときにやっているやり方さ

173 :デフォルトの名無しさん:2017/01/17(火) 00:32:26.63 ID:Upzxz6/t.net
>>172
辞書を作るときは頭から見なくてよいの?

174 :デフォルトの名無しさん:2017/01/17(火) 01:00:47.32 ID:035vzIzN.net
>>173
書籍としての辞書を利用するときをイメージするといいかも
まず視覚的に先頭文字の見出しの位置を開いて調べる
この感覚

近似値を利用する場合は「文末違うけどだいたいこんな感じだよね」って得るためより正確な情報を得るためにはソートする必要がある
完全一致だとそもそも一致していることが条件となるのでソートする必要がなくなる

正確に言うと異なると思うけどだいたいこんなイメージ

175 :デフォルトの名無しさん:2017/01/17(火) 01:13:18.56 ID:mp4Rluyj.net
https://msdn.microsoft.com/ja-jp/library/office/ff726673(v=office.14).aspx#xlLookups

176 :デフォルトの名無しさん:2017/01/17(火) 06:36:26.66 ID:Upzxz6/t.net
>>174
完全一致でも昇順に並べられていることを前提とすれば辞書方式が使えると思うけどな

177 :デフォルトの名無しさん:2017/01/17(火) 07:13:51.32 ID:jzPK8o2C.net
>>176
使えるが そういう仕様に なってない

178 :デフォルトの名無しさん:2017/01/17(火) 09:11:54.79 ID:035vzIzN.net
個人的には完全一致の場合ソート不要って仕様はありがたい

179 :デフォルトの名無しさん:2017/01/17(火) 19:24:38.16 ID:gxb7F/t0.net
>>175

いろいろ勉強になりました。
十数年、vlookupは特殊な場合を除いて完全一致で使うものだと思っていました。
数十万のvlookupをかけて3時間ぐらい帰ってこないような処理をしたことがあり
いま考えると無謀だったなと、、

180 :デフォルトの名無しさん:2017/01/17(火) 20:31:05.76 ID:EPmzwVho.net
xml文を読み込んで階層、パラメータ名、設定値を求めるvbaの書き方がわかりません。
どなたか教えてくださいお願いします。

イメージ図:
http://www.dotup.org/uploda/www.dotup.org1127385.jpg
I1にXML文、A〜G列の1-2行目がある状態でVBAを実行すると、
A〜G列の3行目から下が出力されるイメージです。
XML文全体は約500行のものが複数、どれも階層は4以下です。

以上、よろしくお願いします。

181 :デフォルトの名無しさん:2017/01/17(火) 21:21:06.99 ID:pDqJREhG.net
>>180
この辺りを見てがんばれー
http://freefly3104.hatenablog.com/entry/2015/04/03/222516

182 :デフォルトの名無しさん:2017/01/17(火) 21:22:53.32 ID:UOrZs7iT.net
>>180
ノード名もパラメーターとして出す(イメージ図で言う太字の箇所)
で良いのかい?

あと、階層の各列には同じ数値しか入らない
で良いのかい?

これを求めているのなら求めているで構わないけど得られる結果をまた精査することになると思う

183 :デフォルトの名無しさん:2017/01/17(火) 21:47:24.91 ID:pDqJREhG.net
>>180
あと出力順が
1
 2
  3
  3
  3
のようになってるけど
1
 2
  3
  3
 2
  3
つまり Subject が2回出力されるんじゃダメ?

184 :デフォルトの名無しさん:2017/01/17(火) 21:49:25.15 ID:EPmzwVho.net
>>181
ありがとう。
実はこのサイトとかを参考に試行錯誤したがうまくできくてここで尋ねたんだ。

>>182
はい、おっしゃる通り
・ノード名もパラメータとして(太字で)出す。
・階層の各列には同じ数字しか入らない。B列は空白か1か、C列は空白か2、・・・。
です。

185 :デフォルトの名無しさん:2017/01/17(火) 21:53:52.16 ID:EPmzwVho.net
>>183
1
 2
  3
  3
 2
  3
のようにSubjectを2回出力するのだとだめです、申し訳ない。
これも、1人でできない原因の一つです。
許されたらfor文で各行に対してsplitとか使えばなんとかなりそうだけど・・・

186 :デフォルトの名無しさん:2017/01/17(火) 23:53:22.45 ID:HYIsieSI.net
>>185
その場合
&lt;xxx ...>
 <...>
 <...>
</xxx>
<yyy ...>
 <...>
 <...>
</yyy>
<xxx ...>
 <...>
 <...>
</xxx>
の場合はどのように出力するの?
タグ名毎に集約するの?

187 :デフォルトの名無しさん:2017/01/17(火) 23:55:02.78 ID:HYIsieSI.net
最初が化けた...
<xxx ...>
 <...>
 <...>
</xxx>
<yyy ...>
 <...>
 <...>
</yyy>
<xxx ...>
 <...>
 <...>
</xxx>
のケースね。

188 :デフォルトの名無しさん:2017/01/18(水) 00:16:31.88 ID:P2ujaP/J.net
>>187
はい、そのケースではタグ名毎に集約します。つまり、
<xxx ...>
<...>←yの上の1行目
<...>←yの上の2行目
<...>←yの下の1行目
<...>←yの下の2行目
</xxx>
<yyy ...>
<...>
<...>
</yyy>
と同値とみなします。(Fの列にyyyが1つだけ出る)

ただし、
<xxx ...>
<yyy ...>
</yyy>
</xxx>
<zzz ...>
<yyy ...>
</yyy>
</zzz>
のように階層が異なったり、一つは<xxx>,もう一つは<zzz>の下にあるような場合は、
<xxx>の下の<yyy>と<zzz>の下の<zzz>は別のものとして扱います。(Fの列にyyyが複数出る)

189 :デフォルトの名無しさん:2017/01/18(水) 07:02:26.64 ID:KfZHaLf7.net
>>188
<xxx ...>
<yyy ...> -- (1)
</yyy>
</xxx>
<zzz ...>
<yyy ...> -- (2)
</yyy>
</zzz>
<xxx ...>
<yyy ...> -- (3)
</yyy>
</xxx>
のケースで (1) と (3) も集約するの?
たぶん xml からの読み込みと集約処理を分けた方がいいと思う。

190 :デフォルトの名無しさん:2017/01/18(水) 08:46:32.65 ID:dxlKDUod.net
>>189
携帯から失礼します。
はい、その場合も集約します。

具体的にはどんなコードで書いたらよろしいですかね。

191 :デフォルトの名無しさん:2017/01/18(水) 10:08:50.79 ID:nvWV6Cl1.net
https://youtu.be/quIHgwuF6r4

192 :デフォルトの名無しさん:2017/01/18(水) 10:46:36.89 ID:mepmwC6J.net
Dictionaryの配列で書けるでしょ

193 :デフォルトの名無しさん:2017/01/18(水) 12:19:13.71 ID:zXM8oXoh.net
なんで、XMLParser を自分で作るの?

Groovy とかで、すぐに出来るだろ

194 :デフォルトの名無しさん:2017/01/18(水) 12:35:52.38 ID:4FnlBNL6.net
>>193
すぐw
じゃあ書いてみろよ

195 :デフォルトの名無しさん:2017/01/18(水) 12:38:39.68 ID:NBGHKSlQ.net
さすがに MSHTML.HTMLDocument オブジェクトとかは使うんだろうと思っていたが違うのかな?

196 :デフォルトの名無しさん:2017/01/18(水) 12:54:48.99 ID:Fv9px6Lv.net
特定のセルが書式を設定されてるかどうかの判定ってどうすればいいでしょうか?
例えば文字が入ってなくても色や太さが設定されてるとか

197 :デフォルトの名無しさん:2017/01/18(水) 13:04:49.97 ID:UZ6KtMVe.net
>>196
普通にセルのプロパティで取得すればいいんでない

198 :デフォルトの名無しさん:2017/01/18(水) 13:07:57.97 ID:Fv9px6Lv.net
>>197
If Range("A1").Value="" Then
でいけますか?

199 :デフォルトの名無しさん:2017/01/18(水) 13:25:21.60 ID:UZ6KtMVe.net
>>198
forecolorとかbackcolorとかだよ
オブジェクトブラウザでcells調べてみ?

200 :デフォルトの名無しさん:2017/01/18(水) 15:02:26.86 ID:zXM8oXoh.net
Groovyでは、
def root = new XmlParser().parse("ファイル名.xml")

root.タグ名.each{
println it.text()
ここで処理する
}

it は、イタレータから渡ってくる、暗黙の要素を指す

201 :デフォルトの名無しさん:2017/01/18(水) 17:11:44.24 ID:XrR2JBi4.net
>>180
そもそも、なんでExcelに展開しようとしてるんだ?
それが最終目的か?

あと、自分でどこまでできたのか書いてくれ。

202 :デフォルトの名無しさん:2017/01/18(水) 17:46:16.92 ID:WZOpQPDJ.net
http://smilejapan.net/wiki/index.php?VBA%20XMLデータをDOMで扱う方法

XML関連

203 :デフォルトの名無しさん:2017/01/18(水) 19:44:31.06 ID:zXM8oXoh.net
<Subject japanese="kokugo">
<Subject math="sugaku">

1回目の<Subject>の際、japanese, math の、2つが取れているのは、Traverse の幅優先探索か?
普通は、深さ優先探索だけど

様々な言語を見たけど、日本語のサイトで、Traverse の処理を書いているサイトは、ほとんどない。
どないなっとんねん?

204 :デフォルトの名無しさん:2017/01/18(水) 20:09:10.01 ID:P2ujaP/J.net
>>201
Excelに展開するのが最終目的であってます。
現在自分ではこのような状況・・・

DOMとかわからなくて挫折。xml文の各行をfor文で回してやっている。

【できたこと】
各行のXML文がどの階層についての話か調べる
階層 = (各行の<の前にある空白)×1のため、InStr("各行のXML文","<")-1で求めた。

【できないこと】
パラメータ名と設定値の抜出。
設定値に関してはsplit関数でできるかなと思ったが、
パラメータ名は「空白と=」や「<と空白」等で何で囲まれているかが異なっており、どうすればよいかわからない。

簡単に言うと、
I2:「 <examType first="zenki/shiken" second="koki/shiken" third="">」
とあるとき、
examTypeをF3、firstをF4、secondをF5、thirdをF6、
"zenki/shiken"をG4、"koki/shiken"をG5、""をG6に出す方法がわからない。

205 :デフォルトの名無しさん:2017/01/18(水) 20:17:32.50 ID:WZOpQPDJ.net
xmlファイルをhtmlとして読み込めばいいんじゃね
でgetelementsbytagname()とかつかう

206 :デフォルトの名無しさん:2017/01/18(水) 20:26:10.85 ID:9qUMY5Wm.net
>>204
馬鹿過ぎて話しにならない。
馬鹿に無理。

207 :デフォルトの名無しさん:2017/01/18(水) 20:47:34.80 ID:IDSE4GPa.net
>>194
ふぅ

208 :デフォルトの名無しさん:2017/01/18(水) 21:15:38.89 ID:zXM8oXoh.net
XML Parserは、jQuery, Groovy, Python, Ruby など、何にでもある

ただ、traverse の説明が、日本語のサイトでは見当たらない。
深さ優先ではなく、幅優先探索だろ?

209 :デフォルトの名無しさん:2017/01/18(水) 21:22:46.40 ID:uheDDMMj.net
>>204
DOMじゃないと結構つらいかもよ 出来ん事はないけどね DOM勉強する気があるなら サンプル上げとくよ

DOM+再帰処理してるので詳細はググってねw
あと何階層でも良いのだけれど シートが4階層までしか用意されてないので 4階層に制限してます

'Microsoft XML v3.0 を参照設定
Sub main()
 Dim XMLDoc As MSXML2.DOMDocument
 Dim Row As Long
 Dim No As Long
 Row = 3 'シートに書き込む最初の行位置
 No = 1
 Set XMLDoc = New MSXML2.DOMDocument
 XMLDoc.Load "D:\XML.txt" 'XMLファイルを読み込む
 Call ListXml(XMLDoc.ChildNodes(1), Row, No, 1)
 Cells(Row, "G").Value = "FINISH"
End Sub

Sub ListXml(ByRef Node As IXMLDOMNode, ByRef Row, ByRef No, ByVal Level)
 Dim NodeList As IXMLDOMNodeList
 Dim Node1 As IXMLDOMNode
 Dim Node2 As IXMLDOMNode
 Dim NodeAttr As IXMLDOMAttribute
 'ノード名表示
 Cells(Row, "A").Value = No
 Cells(Row, "B").Offset(0, Level - 1).Value = Level
 Cells(Row, "F").Value = Node.nodeName
 Cells(Row, "G").Value = "-"
 Row = Row + 1
 No = No + 1

210 :209:2017/01/18(水) 21:23:19.50 ID:uheDDMMj.net
'続き
 'ノードパラメータ表示
 For Each NodeAttr In Node.Attributes
  Cells(Row, "A").Value = No
  Cells(Row, "F").Value = NodeAttr.Name
  Cells(Row, "G").Value = NodeAttr.Value
  Row = Row + 1
  No = No + 1
 Next
 '階層制限
 If Level = 4 Then Exit Sub

 '同じ名前の子ノードを 最初の一つに集約
 For Each Node1 In Node.ChildNodes
   Do
     Set NodeList = Node1.ParentNode.SelectNodes(Node1.nodeName)
     If NodeList.Length = 1 Then Exit Do
     For Each Node2 In NodeList(1).ChildNodes
       NodeList(0).appendChild Node2
     Next
     Node1.ParentNode.RemoveChild NodeList(1)
   Loop
 Next
 '子ノード処理(再帰)
 For Each Node1 In Node.ChildNodes
   Call ListXml(Node1, Row, No, Level + 1)
 Next
End Sub

211 :デフォルトの名無しさん:2017/01/18(水) 21:25:28.46 ID:zXM8oXoh.net
XML Parserは、jQuery, Groovy, Python, Ruby など、何にでもある

ただ、traverse の説明が、日本語のサイトでは見当たらない。
深さ優先ではなく、幅優先探索だろ?

Java
http://www.technotype.net/tutorial/tutorial.php?fileId=%7BDOM%7D&sectionId=%7Btraversing-the-node-tree%7D

子ノードリストを取得
NodeList list = parentNode.getChildNodes();

要素に従属する属性リストを取得
NamedNodeMap map = elementNode.getAttributes();

最悪、traverse 関数内で、traverse・自分自身を呼ぶ、再帰的な処理を作る。
traverse 関数が最初からあれば、もっと簡単。
それに幅優先探索を指定する

212 :デフォルトの名無しさん:2017/01/18(水) 21:56:11.82 ID:P2ujaP/J.net
>>210
ありがとう。
実際やってみたらA3とB3に1が出力されて、
オブジェクト変数またはWithブロック変数が設定されていません
と言われました。どうしてだろ。。。

>>211
はい、幅優先探索です。
ありがとうございます。transverseについてちょっと調べてみます。

213 :デフォルトの名無しさん:2017/01/18(水) 22:00:58.72 ID:uheDDMMj.net
>>212
XML規則に則ってる?
あと ノード名(タグ名?)は 大文字小文字 区別するぜ

どっか XMLファイルUP出来ない?

214 :デフォルトの名無しさん:2017/01/18(水) 22:08:43.87 ID:uheDDMMj.net
>>212
もしかして↓このまま? 実際のXMLファイル名に修正してよね

XMLDoc.Load "D:\XML.txt" 'XMLファイルを読み込む

215 :デフォルトの名無しさん:2017/01/18(水) 22:12:35.06 ID:P2ujaP/J.net
>>213
実際のXMLファイル名とそのパスにしています。
XML.txtの中身は以下の通りです。
<?xml version="1.0" encoding="UTF-8">
<examType first="zenki/shiken" second="koki/shiken" third="">
<Subject japanese="kokugo">
<Gendaibun min="50/100" max="85/100" />
<Kobun min="60/100" max="100/100" />
</Subject>
<Subject math="sugaku">
<IA min="30/100" max="80/100">
</IA>
</Subject>
</examType>

216 :デフォルトの名無しさん:2017/01/18(水) 22:29:42.43 ID:uheDDMMj.net
>>215
XML読み込み失敗してるね

※XMLファイル修正(最後に?がない)
× <?xml version="1.0" encoding="UTF-8">
○ <?xml version="1.0" encoding="UTF-8"?>

※コード修正(読み込みエラーでたらMSGBOX)
XMLDoc.Load "D:\XML.txt" 'XMLファイルを読み込む
If XMLDoc.parseError.ErrorCode <> 0 Then
MsgBox XMLDoc.parseError.reason
Exit Sub
End If

217 :デフォルトの名無しさん:2017/01/18(水) 22:30:45.22 ID:vXs3og/7.net
アドインのデータはどこに保存するのが標準的なの?
シートだと階層構造のデータを保存しにくいからxmlファイルにして保存したい

218 :デフォルトの名無しさん:2017/01/18(水) 22:41:40.88 ID:P2ujaP/J.net
>>216
ありがとうございます。エラーはなくなりました。
ただ1つ問題が・・・
math,sugakuを読み込んでいない。8行目と9行目の間に入れたいのですが。

実行画面結果は以下のようになりました
http://www.dotup.org/uploda/www.dotup.org1128435.jpg

219 :デフォルトの名無しさん:2017/01/18(水) 22:50:58.80 ID:uheDDMMj.net
>>218
'同じ名前の子ノードを 最初の一つに集約
で集約してるからそうなるが(その下は移動してる)

前からの レスで集約するって言ってたんじゃない?

'同じ名前の子ノードを 最初の一つに集約
の(FOR〜NEXT)部分ざっくり削除してみ

220 :デフォルトの名無しさん:2017/01/18(水) 23:09:44.67 ID:P2ujaP/J.net
>>219
あー、申し訳ない。
7行目のSubjectの下に、japaneseとmathをまとめて出力するという意味で使ってしまっていました。

221 :デフォルトの名無しさん:2017/01/18(水) 23:20:05.28 ID:P2ujaP/J.net
まとめて=8行目にjapanese,9行目にmath
という意味です

222 :デフォルトの名無しさん:2017/01/19(木) 00:09:17.23 ID:wXKnExNu.net
>>221
こゆう事かな?(同じパラメータは 最後のに置き換えられるよ)
下をそっくり入れ替えて

 '同じ名前の子ノードを 最初の一つに集約
 For Each Node1 In Node.ChildNodes
  Do
     Set NodeList = Node1.ParentNode.SelectNodes(Node1.nodeName)
     If NodeList.Length = 1 Then Exit Do
     For Each Node2 In NodeList(1).ChildNodes
       NodeList(0).appendChild Node2
     Next
     'パラメータコピー
     For Each NodeAttr In NodeList(1).Attributes
      NodeList(0).Attributes.setNamedItem NodeAttr.CloneNode(True)
     Next
     Node1.ParentNode.RemoveChild NodeList(1)
  Loop
 Next

223 :デフォルトの名無しさん:2017/01/19(木) 00:38:26.41 ID:qjpOvOJu.net
ここまで来ると、もうわけがわからんな。
プログラムでプログラム文を自動生成します、みたいな話だろ?

224 :デフォルトの名無しさん:2017/01/19(木) 05:02:36.80 ID:WDgxZeys.net
何かの言語には、自動的に、traverse する関数があるはず。
または既に、外人が作って、Gitにあるはず。
日本のサイトで探しても、見つからない

それに、深さ優先探索か幅優先探索を指定する

Pythonのwalkは、あるディレクトリ以下の階層を渡り歩く。
つまり、それのXML版だろ

ディレクトリもXMLも、Tree だから、基本的には同じ

225 :デフォルトの名無しさん:2017/01/19(木) 06:58:46.51 ID:JadLiFtg.net
>>217
> シートだと階層構造のデータを保存しにくいからxmlファイルにして保存したい
XML 文字列ををセルとかブックのプロパティとかに入れときゃいいだけじゃないの?

226 :デフォルトの名無しさん:2017/01/19(木) 07:34:02.29 ID:R0f6tJX+.net
>>>222
できたああああああああああああ
ありがとうございます!
罫線やノード名の一部を太字にするなど微修正は自分でできました。

皆様ありがとうございました。

227 :デフォルトの名無しさん:2017/01/19(木) 12:16:13.59 ID:SpG+j8gZ.net
   A  B
1 山田 10:50
2 山田 11:50
3 山田 4:50

山田の時間(B列)を1行目から順番に変数(a)に代入して合計を計算して、
Application.Floor(a + TimeValue("0:30"), TimeValue("1:00"))で
30分繰り上げ(例えば1:30の場合2:00に繰り上げ)しているのですが、
総計が24時間を超えると"1900/1/1  28:00"と日付が入り、表示形式がおかしくなってしまいます。
繰り上げのコードが間違っているのでしょうか?

228 :デフォルトの名無しさん:2017/01/19(木) 12:21:46.57 ID:4RX8xFF/.net
>>227
[h]:mm

229 :デフォルトの名無しさん:2017/01/19(木) 12:47:27.51 ID:ZXvOrtNX.net
>>228
解決しました
ありがとうございます

230 :デフォルトの名無しさん:2017/01/19(木) 15:08:53.45 ID:SN1gevnS.net
初質問です!
エクセルにはブック共有状態で変更履歴記録機能があり、新しいシートに変更履歴一覧を作成できると思います。
そこで、VBAで変更期間「すべて」で「新しいシートに変更履歴一覧を作成」の操作をしたいのですが可能でしょうか?
大量のドキュメントの変更履歴を取りたいので、マクロ化したいのが目的です。
可能であればやり方を教えていただきたいです。よろしくお願い致します。

231 :デフォルトの名無しさん:2017/01/19(木) 15:37:44.80 ID:irXhj7sG.net
>>230
とりあえずマクロの記録を試してみたら?

232 :デフォルトの名無しさん:2017/01/19(木) 15:50:51.90 ID:9G0IwAcw.net
>>217
これは俺も知りたいc++だとxmlに書いてるのよく見るけどvbaはどうなんだ

233 :デフォルトの名無しさん:2017/01/19(木) 18:24:05.68 ID:xZWyIIjd.net
Cell Property の .Valueと.Textでは取得のパフォーマンスに
大きな差があるようですがこんなものですか。
7万レコードのセル値取得に使ったのですが、前者は0.3秒ほど
後者は130秒かかりました。
上のほうのレスで .Textを見つけて喜んで使ってみたのですが、、

234 :デフォルトの名無しさん:2017/01/19(木) 20:17:42.34 ID:irXhj7sG.net
>>233
Textの方は書式を評価しないといけないからそんなものじゃね?

235 :デフォルトの名無しさん:2017/01/19(木) 20:23:44.41 ID:R0f6tJX+.net


236 :デフォルトの名無しさん:2017/01/19(木) 21:13:36.84 ID:9zfnUwsN.net
>>234
なるほど
.Valueで取得してから書式あてた方が無難ですね

237 :デフォルトの名無しさん:2017/01/19(木) 23:40:16.64 ID:qjpOvOJu.net
マジか!!
Valueで取得しようとすると、
#N/Aでコケるから、ずっとText使ってたわ!

ん?
でも0.3秒と130秒って違い過ぎじゃないか?
0.3秒なんて、For Nextじゃ取れないと思うが。
a=Range("A1:A70000").Valueとかじゃないと。

238 :デフォルトの名無しさん:2017/01/20(金) 04:41:52.83 ID:9/J9Uge2.net
>>237
そう言われると、、あらためて追試。
試したコードはこんな感じ。

Cells(1, 1).Resize(70000, 1).Select

  '------------------------------
st = Timer
For Each r In Selection
var = r.Value
Next
ed = Timer
Debug.Print "by .Value", ed - st; "[Sec]"

  '------------------------------
st = Timer
For Each r In Selection
var = r.Text
Next
ed = Timer
Debug.Print "by .Text", ed - st; "[Sec]"

セルには[1-70000]のシーケンシャルな数値を格納
これの書式なしと書式あり"[h]:mm"を試しました。
(続く)

239 :デフォルトの名無しさん:2017/01/20(金) 04:43:33.99 ID:9/J9Uge2.net
>>237

(続き)

結果、、
---------------------------------------------
by .Value 0.1855469 [Sec]
by .Text 1.241211 [Sec]
by .Value (Formatted) 0.1806641 [Sec]
by .Text (Formatted) 1.569336 [Sec]
---------------------------------------------

結果、差はあるものの、日中にテストしたものほど
は差がでませんでした。
日中のデータで再度試した結果です。
---------------------------------------------
by .Value (Formatted) 0.2011719 [Sec]
by .Text (Formatted) 99.20215 [Sec]
---------------------------------------------

他の要因もあるかもしれません。
実際のデータはOracleからSQLで引っ張ってきた
テーブルを.Unlistしたもので、70000行x130列ほど
の大きさ。これのV列あたりにある "hh:mm"書式が
当たっているというものです。
自動再計算はOffです。

240 :デフォルトの名無しさん:2017/01/20(金) 11:00:31.99 ID:32Bwzd9P.net
VBA初歩的です。
シート1のA列で文字列の色を変えてその後A列に同じ文字列が書き込まれたら同じ色に変えたいんです。
そして出来たらシート2のA列の同じ文字列も同じ色にしたいんです。
誰かコード分かる方いますでしょうか?

241 :デフォルトの名無しさん:2017/01/20(金) 13:04:58.83 ID:nnKMBoVD.net
>>240
スマホから書き込もうと思ったら案外大変で諦めた

A列の重複を排除したリストを作成(配列、コレクション等)
リストとA列を比較して色を指定
で行けるんだけど、何がわからんのか
文字列の種類は不定なのか固定なのか、色に指定はあるのかなど情報も少ない

242 :デフォルトの名無しさん:2017/01/20(金) 13:05:01.85 ID:JXdqXSkU.net
初歩的?
自分でマクロの記録で調べろよ

243 :デフォルトの名無しさん:2017/01/20(金) 14:58:10.41 ID:Nvso2zBq.net
質問じゃなくてタダで作ってくれって言ってるんやで

244 :デフォルトの名無しさん:2017/01/20(金) 16:54:43.86 ID:bVBZQrA4.net
失礼します
学校でgoogle financeのapiを利用したのを作成しているのですが
A列の証券コードの羅列を読み取りURLに追加しJSONのティックデータを取得するところまでは
行けたのですが、どうやって個々にパースすればいいかわかりません、生データを取得するまでのコードは以下
Dim W As Worksheet: Set W = ActiveSheet
Dim i As Integer
Dim Last As Integer
Last = W.Range(

245 :デフォルトの名無しさん:2017/01/20(金) 16:59:50.09 ID:bVBZQrA4.net
うまく書き込めなかったようです
取得したでーたは下のurlの通りです
https://finance.google.com/finance/info?client=ig&q=TYO:1332,1515,1925,7203,8058,8766,8801,9501,1954,1973,2928,2172,7980,6656,9085,5998,4556,1381,1400,1382,1739,2173,2351,7464,1734,7958,1736,2425,6960,2121


とずっと続いています
これを個々にパースしてセルごとに振り分けたいのですが
個々にパースするにはどのようにすればいいかわかりません
誰か助けてください

246 :デフォルトの名無しさん:2017/01/20(金) 17:12:18.70 ID:gQ8iElJX.net
>>244
"vba json パース"でググる

247 :デフォルトの名無しさん:2017/01/20(金) 18:21:41.59 ID:FuK3VNeE.net
>>240
在日か?日本語不自由そうだな

248 :デフォルトの名無しさん:2017/01/20(金) 18:33:30.59 ID:Zm/Pjw4E.net
すいません楽天rss使ってるのですが
vbaからセルに10銘柄程コードを入れても頻繁にすべてN/Aと出てしまうのです
接続が切れてるわけではなく、例えばexcelの上書き保存をクリックするとN/Aが
消えてすべて表示されるのです

vbaでは画面の更新は切ってないのですが原因は考えられますか?

249 :デフォルトの名無しさん:2017/01/20(金) 19:25:28.08 ID:gGEm4cbB.net
VBAでWebAPI叩きたくなる気持ちが理解できない
PowerShellやC#やVB.NETじゃダメだったのか

250 :デフォルトの名無しさん:2017/01/20(金) 20:22:24.18 ID:ymDflbNb.net
>>249
結果を Excel で処理したいんだろ
なら VBA が一番自然だわな
ただ言語としての機能がいまいちだから俺なら PowerShell で取得して Excel に書き込むかな

251 :デフォルトの名無しさん:2017/01/20(金) 20:58:17.11 ID:mJKyjGCe.net
>>249
いや、いいんじゃないか?
ただスレチになるから
そういう話は.Netのスレでやればいいだけで

252 :デフォルトの名無しさん:2017/01/20(金) 21:08:26.20 ID:MJq7L3EO.net
https://www.google.com/finance/getprices?p=1d&f=d,h,o,l,c,v&i=300&x=INDEXNIKKEI&q=NI225
これ?
DATA_SESSIONS はjsonの配列表記っぽいけど、データ部は単なるカンマ区切りのような(他も改行区切りだしjsonじゃないような)

.NETもjsonのパースにはNuGetが必要じゃなかったっけ(なんかDLLが増えるのが嫌で自力パースしたことある)
PowerShellはjsonのパースもできるのか

253 :デフォルトの名無しさん:2017/01/20(金) 21:31:05.58 ID:z3TtdYe7.net
>>249
えくせるしかないなら仕方ない

254 :デフォルトの名無しさん:2017/01/20(金) 22:33:30.45 ID:vub4eIsV.net
>>249
それは本職プログラマーの発想だろうな。
事務職プログラマーは、VBAが一番いいの。
普段からエクセル使ってるから。

255 :デフォルトの名無しさん:2017/01/20(金) 22:47:39.08 ID:RRdjAoJX.net
VBA使うなとは言わないけど
もうちょっとPSや.NETとの連携が楽になれば助かるね

256 :デフォルトの名無しさん:2017/01/20(金) 23:00:24.99 ID:v0MXJAlx.net
VBA自体更新か新たな言語にしてほしいな

257 :デフォルトの名無しさん:2017/01/20(金) 23:58:46.82 ID:0ryOpRhF.net
理想を言えば C# for Application にしてくれればとは思う
まあ VB.Net for Application でもいいけど

258 :デフォルトの名無しさん:2017/01/21(土) 00:17:22.31 ID:O6MYDtgM.net
vbaが.netと楽しくできないのはmacのせいじゃね?

259 :デフォルトの名無しさん:2017/01/21(土) 00:37:57.62 ID:7WDSmlh4.net
ExcelのVBAからOutlookのメール作成のツールを作っているのですが
送信先やCCやタイトルや本文は書くことができました。
しかし本文のある部分を好きな色にしたり好きなフォントにしたり好きなサイズにしたりハイパーリンクをつけたいんです。
そのためにはどうすればいいでしょうか?

260 :デフォルトの名無しさん:2017/01/21(土) 08:04:31.56 ID:6NvQGvfC.net
>>244-245
2chのバグだろう

書き込み確認画面が出る際、" を使うと、そこで文字列の終了とみなされる。
" の代わりに、\" とエスケープすれば、どうだろう?

それか、書き込み確認画面が出たら、1度キャンセルすれば、確認画面は出ないようになった

261 :デフォルトの名無しさん:2017/01/21(土) 09:24:23.74 ID:W/Qp5igc.net
>>244
↓のサイトを参考にして作ってみたら?
http://outofmem.tumblr.com/post/63355773212/vbavbaでjsonをパースする

ざっくり 作って見たけど なんとかなりそうよ
学校の課題らしいからこの辺で
では

262 :デフォルトの名無しさん:2017/01/21(土) 10:17:45.16 ID:W/zpHkC+.net
Jsonは構造がシンプルだからパーサー書くのも難しくない
学生なら勉強として書いてみる価値はある

263 :デフォルトの名無しさん:2017/01/21(土) 11:18:37.44 ID:1cIKmUbZ.net
>>259
HTML でやるならここのサンプル
https://msdn.microsoft.com/ja-jp/library/office/ff869979.aspx

リッチテキストでやるならフォーマットを RTF に設定して RTFBody に設定すればいい
https://msdn.microsoft.com/ja-jp/library/office/ff867828.aspx

264 :デフォルトの名無しさん:2017/01/21(土) 11:23:47.66 ID:7WDSmlh4.net
>>263
ありがとうザマス。
やってみるでガンス。

265 :デフォルトの名無しさん:2017/01/21(土) 11:27:24.97 ID:7WDSmlh4.net
あとこれも頻繁に使う予定ですが
Outlookのカレンダー(おそらく型はolAppointmentItemでしょう)の本文でも
本文のある部分を好きな色にしたり好きなフォントにしたり好きなサイズにしたりハイパーリンクをつけるにはどうすればいいでしょう?
ちょっと調べるとBodyFormatプロパティやHTMLBodyプロパティはなさそうですが。

266 :デフォルトの名無しさん:2017/01/21(土) 11:44:27.71 ID:1cIKmUbZ.net
>>265
HTMLBody はないけど RTFBody はあるよ
https://msdn.microsoft.com/ja-jp/library/office/ff861303.aspx

267 :デフォルトの名無しさん:2017/01/21(土) 12:01:08.22 ID:7WDSmlh4.net
>>266
わたしのOffice2007のバージョンのOutlookにはRTFBodyプロパティは無いようなのですが。
http://www.dotup.org/uploda/www.dotup.org1130546.png

でもOffice2007でもカレンダーの本文のある部分に手動で装飾ができるのでマクロでもできるはずだと思います。
どうすればいいのでしょうか?

268 :デフォルトの名無しさん:2017/01/21(土) 13:22:18.60 ID:JwMYXArD.net
どっちかというと.NETがおかしいんだけどね
全部用意してやるからActiveXやWin32APIを使うなと言わんばかりの不便さ
言語の内部にない機能を外から持ってくるからオープン系と言うんだと思ってたけど

269 :デフォルトの名無しさん:2017/01/21(土) 13:57:11.70 ID:1cIKmUbZ.net
>>267
う〜ん、ないなら無理っぽいかと
> でもOffice2007でもカレンダーの本文のある部分に手動で装飾ができるのでマクロでもできるはずだと思います。
アプリの機能の全てをマクロでサポートしてるとは限らんし...

270 :デフォルトの名無しさん:2017/01/22(日) 18:24:33.89 ID:dK0oU8+I.net
初心者の質問ですみません。
仕事で各部署から大量に写真が来て、部署毎の名前のフォルダに連番ファイルで保存しているのですが、
フォルダの最後のファイルだけピックアップする必要ができてしまいどうにも困っています。
Excelのマクロを使えばどうにかなりそうだとは思うのですが、どなたかお知恵を貸していただけないでしょうか?

例)
c:\営業一課\営業一課00001.jpg 〜営業一課00060.jpg
c:\資材課\資材課00001.jpg 〜 資材課00020.jpg
c:\物流課\物流課00001.jpg 〜 物流課00120.jpg

等、ファイル名は[フォルダ名 + 5桁の数字]。5桁の数字は00001から始まって、終わりの数字(ファイル数)はフォルダ毎にバラバラの状態です。

この状態で、↑の例で言うなら営業一課00060.jpgと資材課00020.jpgと物流課00120.jpgを、
c:\最後\ のフォルダに切り取り貼り付けしたいのですが…

マクロ限定では無く、何かのソフトの組み合わせで実現できるというならそれでも構いません。
フォルダ数が10や100なら力任せにファイラーで移動するのですが、現在50000くらいフォルダ数があって、一日200-300くらいの勢いで増えてます…

271 :デフォルトの名無しさん:2017/01/22(日) 18:45:46.18 ID:mco4N0ih.net
ファイル操作や並び替えはPowershellの方が簡単だよ

272 :デフォルトの名無しさん:2017/01/22(日) 18:56:47.41 ID:PXtZmaP4.net
>>270
切り取り貼り付けで馬鹿だとよくわかる
ロジック的にも間違いを引き起こすようなロジックしか考えられないし

馬鹿確定

273 :デフォルトの名無しさん:2017/01/22(日) 19:13:35.66 ID:K9IWtO+t.net
初心者と一々断らなくて良いよ、と言おうと思ったら、
>>272みたいな上級者気取りが現れるから仕方ないか・・

これを参考にして
http://officetanaka.net/excel/vba/file/file07.htm

274 :デフォルトの名無しさん:2017/01/22(日) 19:49:33.32 ID:YJLP3OgH.net
>>272
$work =

275 :デフォルトの名無しさん:2017/01/22(日) 20:32:29.70 ID:b7Xc1TTL.net
>>270
vbaでもいいけど
普通にvbscriptみたいなものでも簡単にできるよ
vbs フォルダ 検索
でぐぐったらどうでしょう

276 :デフォルトの名無しさん:2017/01/22(日) 20:54:41.71 ID:XKc56KzG.net
>>272
うるせえぞ馬鹿
真面目に質問してる人になんだそりゃ。

277 :デフォルトの名無しさん:2017/01/22(日) 21:01:31.37 ID:xqqm72Ga.net
>>270
各フォルダには画像以外のファイルも入ってるかどうか
拡張子は小文字のjpgだけか、JPGやjpegも混ざってるかどうか

それだけ教えて

278 :デフォルトの名無しさん:2017/01/22(日) 21:10:37.07 ID:PXtZmaP4.net
馬鹿はファイルのコピーや移動の仕方でわかるんだよな。
馬鹿のくせに間違いを絶対にしない前提の方法で話しを進めるのが馬鹿たる所以。

279 :デフォルトの名無しさん:2017/01/22(日) 21:26:21.62 ID:o6OZ0Umu.net
( ´_ゝ`)フーン

280 :デフォルトの名無しさん:2017/01/22(日) 21:41:22.76 ID:uPXBwAbd.net
>>277
拡張子がなんにしても全パターン網羅してリプレイスして番号で最大値とって取得やんな?

281 :デフォルトの名無しさん:2017/01/22(日) 21:43:59.78 ID:fxkBMvoQ.net
>>278
あ、ごめん
即座に罵倒するようなヤツとは関わらないって決めてるので誰にも迷惑のかからないところで勝手に盛り上がっててください

282 :デフォルトの名無しさん:2017/01/22(日) 22:05:16.58 ID:5pcXYXa+.net
病気なんだよ

283 :270:2017/01/22(日) 22:11:46.10 ID:dK0oU8+I.net
>>277
フォルダの中身は小文字の.jpgのみです。

>>273
参照のページで、ファイル名一覧が取得できるまでは解るのですが、
それを取得してどうすれば良いのかが解りませぬ。

284 :デフォルトの名無しさん:2017/01/22(日) 22:21:58.08 ID:K9IWtO+t.net
>>278
知らないから馬鹿じゃないだろ
>>270を「馬鹿のくせに間違いを絶対にしない前提の方法で話しを進める」と決めつけるのが馬鹿

>>283
一覧をソートすれば取得できる

というオレもVBA初心者ゆえ、正確に答える自信がないので、概念だけでスマンw

285 :デフォルトの名無しさん:2017/01/22(日) 22:30:17.75 ID:l2Nz+a62.net
>>270
>c:\最後\ のフォルダに切り取り貼り付けしたいのですが

移動(元フォルダからは消える)するより
コピーするか ショートカット作成した方が良いんじゃないかと思うのだが
どうよ
後 実際の各フォルダは c:\ の直下なの?

286 :デフォルトの名無しさん:2017/01/22(日) 23:05:08.45 ID:4Incfzmy.net
>>270
スレ違いだけどPowerShellで

$folder_from = "C:\"
$folder_to = "C:\最後\"

foreach($child_folder in ls -Path $folder_from | ?{ $_.Name -match '.+課$' })
{
$regex = '^' + $child_folder.Name + '\d+\.jpg$'
$last_item = ls -Path $child_folder | ?{ $_.Name -match $regex }| select -Last 1
mv $last_item.FullName $folder_to
}

287 :デフォルトの名無しさん:2017/01/22(日) 23:12:38.88 ID:qK5fG7bF.net
できた
ちゃんと動くかどうかテストしてないんでバックアップとってな

Sub CopyLastFile()
  TargetFolder = "C:\"  ' 処理するフォルダ
  If Right(TargetFolder, 1) <> "\" Then TargetFolder = TargetFolder & "\"
  Set Dirs = CreateObject("Scripting.FileSystemObject").GetFolder(TargetFolder).SubFolders
  For Each CurrentFolder In Dirs
    If CurrentFolder.Name <> "最後" And CurrentFolder.Name <> "System Volume Information" Then
      MaxName = ""
      FName = Dir(TargetFolder & CurrentFolder.Name & "\*.jpg")
      Do While FName <> ""
        If FName > MaxName Then MaxName = FName
        FName = Dir()
      Loop
      If MaxName <> "" Then  ' ファイルを移動
        Name TargetFolder & CurrentFolder.Name & "\" & MaxName As TargetFolder & "最後" & "\" & MaxName
      End If
    End If
  Next
End Sub

288 :デフォルトの名無しさん:2017/01/22(日) 23:43:51.53 ID:Wwv6/pAu.net
汚ねぇ言語だな
何がなんだかさっぱり

289 :270:2017/01/23(月) 00:41:20.21 ID:U6yzB2m0.net
>>268
>>287
お手数掛けてしまい申し訳ありませんが、どちらも動きませんでした…
「ファイルが見つかりません」とエラーメッセージが出てしまいます。

290 :デフォルトの名無しさん:2017/01/23(月) 00:55:01.54 ID:ST2LRMx2.net
しょせん馬鹿には無理なんだよ

291 :デフォルトの名無しさん:2017/01/23(月) 01:08:05.39 ID:ayLfxszv.net
フォルダの場所はあくまで例という事なので
適切に弄った上で見つからないのかな

292 :デフォルトの名無しさん:2017/01/23(月) 01:55:52.05 ID:sOYRMmGw.net
vbaのソースをハイライトしてくれて公開できるサイトってありますか?

293 :デフォルトの名無しさん:2017/01/23(月) 04:46:02.80 ID:WP/2JyPJ.net
>>287を試したけど、ちゃんと動いたぜ
http://i.imgur.com/wCOzgx4.png

もちろん最初のフォルダ定義は書き換えたよな?
そこ以外はフォルダ名もファイル名もディスクから読み取ってるんだから、見つからないわけがないんだが

294 :デフォルトの名無しさん:2017/01/23(月) 04:51:29.77 ID:WP/2JyPJ.net
>>292
VBAに対応したサイトは見たことないけど、
RangeとかCellsがハイライトされないと困る用途でなければVBを選択してみたら?

295 :デフォルトの名無しさん:2017/01/23(月) 04:53:06.02 ID:WP/2JyPJ.net
あ、あと「最後」フォルダも手動で作っとかないとだめだよ

296 :270:2017/01/23(月) 06:51:27.51 ID:U6yzB2m0.net
>>287
>>293
別のサンプルで試したところ、きちんと動作いたしました。
最初に用意したサンプルの部署の名前にシステム外?の漢字が使われていた為に失敗していたようです。
(ひらがなの「が」が、「か+゛」になっていたという。Mac←→Winの文字コードの違いの問題?)

そちらはなんとかなるので、これで問題解決です。
皆様方、ありがとうございました。

297 :デフォルトの名無しさん:2017/01/23(月) 08:12:32.04 ID:sOYRMmGw.net
>>294
なるほど! ありがとうございましたm(__)m

298 :デフォルトの名無しさん:2017/01/23(月) 12:58:13.38 ID:Z+1qxvba.net
>>296
utf-8 は、濁点半濁点を分離しない

一方、utf-8-mac は、濁点半濁点を分離して、別の文字とする

299 :デフォルトの名無しさん:2017/01/23(月) 15:48:10.56 ID:r+jEG7u3.net
質問です

HTMLで要素を特定するのが難しい複雑なWEB GUIを自動操作したく、キーボード入力のみ(TAB、ENTER、文字入力の組み合わせ)で原始的に操作すればいいんじゃないかと考えました
このような方法は効果的ですか?
またIE画面の取得やSendKey、busy状態の判定などはurlさえあれば可能なのでしょうか?

300 :デフォルトの名無しさん:2017/01/23(月) 16:25:14.53 ID:dyeHk94Y.net
>>299
> HTMLで要素を特定するのが難しい複雑なWEB GUIを自動操作したく、キーボード入力のみ(TAB、ENTER、文字入力の組み合わせ)で原始的に操作すればいいんじゃないかと考えました
> このような方法は効果的ですか?
「効果的」の意味が良くわからないが、確実性に欠けるので実装方法としては下策。

301 :デフォルトの名無しさん:2017/01/23(月) 18:23:23.13 ID:iz5/M2l3.net
>>299
何故HTMLで要素を特定するのが難しいのか?
あとそれが難しいのにキーボード操作なら目的の操作を出来るのは何故か?
効果的かどうかどうやって判断するのか?

302 :デフォルトの名無しさん:2017/01/24(火) 09:50:42.62 ID:Q9g90nxH.net
>>300
>>301
回答ありがとうございます
効果的か、というのは他に楽ないい選択があるか、という意味です
初心者なので要素の取得に時間がかかり、単純なWEBページならなんとか操作できるのでが
ジャバの記述でソースコードがぐちゃぐちゃになっており要素の取得がしんどいです
実際のie操作を記録してコード組んでくれるソフトとか無いんですかね

303 :デフォルトの名無しさん:2017/01/24(火) 11:44:50.88 ID:tZ08PDgQ.net
>>302
UWSC

304 :デフォルトの名無しさん:2017/01/24(火) 12:51:19.59 ID:2vJhPAHl.net
>>302
ブラウザでF12キーとか押してみたら

305 :デフォルトの名無しさん:2017/01/25(水) 01:50:28.88 ID:mqe1OJqx.net
何かカッコイイ名前つけようぜ。
コスモ関数とか。
Subを廃止にして、Zamとかどうよ。
Ifも古くなってきたから、Izuとか。

306 :デフォルトの名無しさん:2017/01/25(水) 04:02:53.45 ID:IbVYSEZD.net
マクロじゃなくて馬鹿専用とかな

307 :デフォルトの名無しさん:2017/01/25(水) 15:39:29.51 ID:Lt8lAI1l.net
かなりの初心者です。
エクセルに画像挿入する際の質問です。
エクセルに大量の画像を挿入したいのですが、ファイルが重たくなりすぎるためリン
ク挿入を考えています。
ファイルをCDにやいて先方に渡したいので、絶対パスではなく相対パスでの画像挿入
がしたいです。
エクセルファイルと大量の画像データは同じフォルダ内にあります。
Insertで挿入してもaddpictureで挿入してもメディアにフォルダごと移動したとたん
リンク切れになるので困っています。
よろしくお願いします。

308 :デフォルトの名無しさん:2017/01/25(水) 17:01:41.71 ID:IbVYSEZD.net
>>307
なぜhtmlにしないの?

309 :デフォルトの名無しさん:2017/01/25(水) 17:35:49.92 ID:ekWp7cd2.net
数値の変化する1つのセルの最大値を他のせルに記録したいのです。
例えば B5 セルの値が、15 10 23 5
と変化したら、隣のC5のセルに、 23 と表示させたいのです。

エクセルの関数になるのかもしれませんが、ググってもどう調べても分かりません。

皆さま何卒宜しくお願い致します。

310 :デフォルトの名無しさん:2017/01/25(水) 17:53:01.54 ID:vlkVtG3b.net
>>309
その要件は >>307 のどこにあたるの?

311 :デフォルトの名無しさん:2017/01/25(水) 18:08:36.73 ID:ncsczmSY.net
>>307
htmlとして保存とかできなかったっけ

312 :デフォルトの名無しさん:2017/01/25(水) 19:35:21.34 ID:mqe1OJqx.net
>>307
リンク切れになる理由はわからんけど、
ファイルを開いた時に、リンク解除→再リンクすればいいんじゃないの?

313 :デフォルトの名無しさん:2017/01/25(水) 21:13:17.06 ID:CnexM6ZX.net
>>310
えっ?

314 :デフォルトの名無しさん:2017/01/25(水) 21:38:36.75 ID:eyqKHvfT.net
>>309
対象のセルがひとつだったらグローバル変数を使って簡単にできる

Private max__ As Double

Function getMax(ByVal x As Double) As Double
If max__ < x Then max__ = x
getMax = max__
End Function

セルC5に
= getMax(B5)
と入れときゃいい

315 :デフォルトの名無しさん:2017/01/25(水) 21:41:05.43 ID:eyqKHvfT.net
初期値がゼロだから、

Sub resetMax()
 max__ = -1.79769313486231E308
End Sub

とかが必要かもしれない

316 :デフォルトの名無しさん:2017/01/25(水) 22:18:36.62 ID:eU88gsvp.net

板復帰(OK!:Gather .dat file OK:moving DAT 540 -> 537:Get subject.txt OK:Check subject.txt 540 -> 539:Overwrite OK)2.94, 2.24, 1.93
age subject:539 dat:537 rebuild OK!

317 :デフォルトの名無しさん:2017/01/25(水) 22:49:29.44 ID:CnexM6ZX.net
>>315
要らないです

318 :デフォルトの名無しさん:2017/01/25(水) 22:54:53.11 ID:eyqKHvfT.net
>>317
ほう、なぜ?

319 :デフォルトの名無しさん:2017/01/25(水) 23:05:36.18 ID:AeM3WiQW.net
ほうなぜ

320 :デフォルトの名無しさん:2017/01/26(木) 01:27:18.15 ID:lerVaKyH.net
ほぜなう、ななほなう、ほぜぜほ、ううう、うう、ななほ、ななほ、うほうほうほほ、ぜうほなーほ

321 :デフォルトの名無しさん:2017/01/26(木) 08:19:49.57 ID:ZDwsAfth.net
>>318
一回目の値取り込めは必須だから。
この場合は15は必ず最大値。

322 :デフォルトの名無しさん:2017/01/26(木) 08:27:33.82 ID:GoiJIG7T.net
>>321
B5が全部マイナスのケースは?

323 :デフォルトの名無しさん:2017/01/26(木) 09:20:45.29 ID:ZDwsAfth.net
>>322
あーその場合があったか!
いやー失敬失敬






な訳ない。
一回目は絶対最大値なんです。
この場合正負は、なんの意味がない。

324 :デフォルトの名無しさん:2017/01/26(木) 09:50:34.79 ID:8Qm9FYvM.net
>>323
君が想定してるコードは >>314 なの それとも別のコード?

325 :デフォルトの名無しさん:2017/01/26(木) 10:02:08.25 ID:mPWEbfd1.net
>>323
>>314のグローバル変数はDouble型だから何もしないと初期値は0.0だ。
これが何を意味するかはわかるな?

326 :デフォルトの名無しさん:2017/01/26(木) 10:09:43.56 ID:oMPl1Srs.net
>>323
これは恥ずかしい

327 :デフォルトの名無しさん:2017/01/26(木) 11:12:41.51 ID:KR9GJXBK.net
>>324
>>325
>>326
314は考慮してない。
315のように型考慮とか手間。

328 :デフォルトの名無しさん:2017/01/26(木) 11:17:55.57 ID:SSl970Br.net
>>327
そもそも会話に参加してなかったってことは理解した

329 :デフォルトの名無しさん:2017/01/26(木) 11:28:23.97 ID:mPWEbfd1.net
>>327
型考慮が手間?
じゃあVariantにすればいい。Emptyであれば未初期化状態とわかるからそこで分岐できる。

そもそもなんのデータなんだ?
気温とかで最高気温をとりたいというならずっとマイナス値で推移することもあるし、
株価とかの最高値をみたいというなら正数だけ考えればいいし。

330 :デフォルトの名無しさん:2017/01/26(木) 11:52:33.91 ID:KR9GJXBK.net
>>328
正しい
>>329
観点そこじゃねーよ
イチイチ型の下限をハードコーディングかよ。

何にも思わないんだw

331 :デフォルトの名無しさん:2017/01/26(木) 12:00:40.09 ID:mPWEbfd1.net
>>330
使い捨ての例示だろ?
それで十分さ

332 :デフォルトの名無しさん:2017/01/26(木) 12:04:08.41 ID:mPWEbfd1.net
意図明確なハードコーディングなどなんら問題ないという立場。
型ごとの下限値とか一日の秒数とか、文脈で明かでかつ誰でも知っている値は本番プログラムでもなきゃそのまま例示するさ。

333 :デフォルトの名無しさん:2017/01/26(木) 12:07:50.47 ID:ZDwsAfth.net
>>331
そうかもね

ただ>>309が不憫でよ。
いきなり>>314だろ。
>>315で結びが『かもしれない』

まじがんばれ>>309

334 :デフォルトの名無しさん:2017/01/26(木) 12:17:36.90 ID:mPWEbfd1.net
>>333
じゃあ別な方法を示せばいい

そもそも「正負がなんの意味もない」ってどういうことだ?説明しろ。

335 :デフォルトの名無しさん:2017/01/26(木) 12:31:36.89 ID:SSl970Br.net
この話題については
やりようによってはグローバル変数って不要じゃないかな?
って思う

336 :デフォルトの名無しさん:2017/01/26(木) 12:39:56.63 ID:oMPl1Srs.net
こういうの考えてたんじゃね?知らんけど
でも>>315に関して「一回目は絶対最大値なんです。正負はなんの意味もない」ってのは意味不明

Private Sub Worksheet_Change(ByVal Target As Range)
  If Intersect(Target, Range("B5")) Is Nothing Then
    Exit Sub
  Else
    Range("C5") = WorksheetFunction.max(Range("B5", "C5"))
  End If
End Sub

337 :デフォルトの名無しさん:2017/01/26(木) 12:47:28.93 ID:ZDwsAfth.net
>>334
提示コードとは切り離す。
片手落ちの提示コードなら
初期値を型下限にしないと負側は
動かないよ。

最大値の定石算法なら正負は意味ないよ。
だって正しく求まるから。
http://d.hatena.ne.jp/geek-it/touch/20120226/p1

338 :デフォルトの名無しさん:2017/01/26(木) 12:55:45.77 ID:ZDwsAfth.net
>>336
c5は試行の開始では
どういう状態なんだろうね?

339 :デフォルトの名無しさん:2017/01/26(木) 12:57:50.00 ID:mPWEbfd1.net
>>337
n[0]とは何で、どうやって取得するのか教えて

340 :デフォルトの名無しさん:2017/01/26(木) 12:58:02.38 ID:oMPl1Srs.net
>>337
とりあえず馬鹿ってことはわかった
グローバルにカウンタつくってIf count = 1 Then ってやっときゃいいじゃんw

341 :デフォルトの名無しさん:2017/01/26(木) 13:09:31.18 ID:ZDwsAfth.net
>>339
b5からとるんだよ。

ただ
ほんとに知りたいところそこなの?
これから何を本質的に疑問に思ってる?

342 :デフォルトの名無しさん:2017/01/26(木) 13:11:07.17 ID:ZDwsAfth.net
>>340
その手段で
どういった目的を達成できるか
説明お願いします。

343 :デフォルトの名無しさん:2017/01/26(木) 13:16:03.48 ID:mPWEbfd1.net
>>341
B5に初めて値が(たとえば3とする)が代入されたとき、C5にはもちろん3と表示されるべきだが、それをどうやってやるの?

344 :デフォルトの名無しさん:2017/01/26(木) 13:19:12.95 ID:oMPl1Srs.net
自分でコード書いて提示してみ?
たぶん根本的に意味をわかってない

345 :デフォルトの名無しさん:2017/01/26(木) 13:22:44.99 ID:mPWEbfd1.net
あっもしかして、初めてB5に値を入れたらそこで「人が」C5に何らかの計算式を入れるとかの運用を考えてる?

346 :デフォルトの名無しさん:2017/01/26(木) 13:24:08.19 ID:oMPl1Srs.net
なわけねーだろw
だから自分でコード書いてみろって
何を勘違いしてるか自分で気づくだろ

347 :デフォルトの名無しさん:2017/01/26(木) 13:26:06.34 ID:oMPl1Srs.net
ああ、ZDwsAfthのレスと勘違いしたわすまん

348 :デフォルトの名無しさん:2017/01/26(木) 13:28:19.88 ID:mPWEbfd1.net
>>347
ドンマイ

349 :デフォルトの名無しさん:2017/01/26(木) 13:30:55.01 ID:ZDwsAfth.net
>>347
ドンマイ

350 :デフォルトの名無しさん:2017/01/26(木) 13:33:47.09 ID:oMPl1Srs.net
>>349
すまんな
コードの提示を頼むわ、飯くってくる

351 :デフォルトの名無しさん:2017/01/26(木) 14:19:03.93 ID:5gl79ALu.net
>>309
Worksheet_Changeとかのイベントで
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim peak, x: peak = "C5": x = "B5"
If Not IsNumeric(Range(x)) Then Exit Sub
If Not IsNumeric(Range(peak)) Then Range(peak) = Range(x)
If Range(peak) < Range(x) Then Range(peak) = Range(x)
End Sub
セルが空でも動く

352 :デフォルトの名無しさん:2017/01/26(木) 14:25:54.93 ID:MANz96Le.net
>>309
参照設定でMicrosoft Scripting Runtimeを追加して、標準モジュールに以下のコードを記述後、
C5に=showMaxValue(B5)と入力する。

'対象セルの最大値を保存する場所
Dim dic As New Dictionary

Public Function showMaxValue(cell As Range)
  If IsEmpty(cell) Then
    ' 対象セルをクリアしたときにどう振る舞うのかを
    ' 決定する必要があるが、取りあえず何もしない
    Exit Function
  End If
  
  If dic.Exists(cell.Address) Then
    If cell.Value > dic(cell.Address) Then
      dic(cell.Address) = cell.Value
    End If
  Else
    dic.Add cell.Address, cell.Value
  End If

  showMaxValue = dic(cell.Address)
End Function

353 :デフォルトの名無しさん:2017/01/26(木) 14:57:52.29 ID:mPWEbfd1.net
>>352
なるほど

354 :デフォルトの名無しさん:2017/01/26(木) 16:21:12.51 ID:U3KmvQxt.net
>>308
>>311
>>312
ご回答どうもありがとうございます。htmlでとは全く思いつかなかったので目から鱗でした。ただ、改ページプレビューでの印刷範囲などがhtmlだとうまくできないです。
また、絶対参照になってしまうのはexcel2013以降の仕様のようなことが書いてあるサイトを見つけました。
http://www.h3.dion.ne.jp/~sakatsu/Excel_Tips21.htm#S9
結局ファイルを分けて実ファイルを挿入する方法にします。
どうもありがとうございました。

355 :デフォルトの名無しさん:2017/01/26(木) 18:30:34.79 ID:Cqc92u/s.net
セガのテトリスをエクセルで作ってみた
https://www.youtube.com/watch?v=CTotYTOpR9E

356 :デフォルトの名無しさん:2017/01/26(木) 19:37:07.62 ID:3eEczd4r.net
excelの神経衰弱 https://youtu.be/TAzqqZgVEa4

357 :デフォルトの名無しさん:2017/01/26(木) 19:56:43.48 ID:GoiJIG7T.net
>>352
それって複数のセルを扱えるようにしてるだけで初期値については >>329 の Variant と本質的には一緒だよね

358 :デフォルトの名無しさん:2017/01/26(木) 20:03:13.82 ID:3C+35NwQ.net
showMaxValueてwwwww
なにをどうshowしてんだよw関数名で嘘つくとかサイテーだなw

359 :デフォルトの名無しさん:2017/01/26(木) 20:10:27.05 ID:q3eaEqve.net
>>357
>>329のまま複数のセルで関数を使うと想定外の結果になるんだから>>352のは優れている

360 :デフォルトの名無しさん:2017/01/26(木) 20:50:17.03 ID:5GTFMqAx.net
実際に機能するプログラムはすぐに人に見せるべきだね

361 :デフォルトの名無しさん:2017/01/26(木) 20:55:56.92 ID:uLxLwJKu.net
>>359
> 初期値については
って書いてますやん...

362 :デフォルトの名無しさん:2017/01/26(木) 20:58:31.55 ID:5GTFMqAx.net
>>361
なるほど。
すマンこ

363 :デフォルトの名無しさん:2017/01/27(金) 05:00:53.63 ID:wqjWN3QH.net
初めまして。
セル(1,1)から始まって横に 3、12、−1、6、−2など数字が続き、
マイナスだけ抽出して合計したい場合はどうすればいいでしょうか。
↓では当たり前ですがうまくいきません…

Sub test()
x = 1
Do Until x > 5
If Cells(1, x) < 0 Then
Cells(1, 6) = Cells(1, x)

End If
x = x + 1
Loop
End Sub

364 :デフォルトの名無しさん:2017/01/27(金) 05:25:43.17 ID:MGewCQt5.net
>>363
マイナスだけ合計
Sub test()
x = Application.WorksheetFunction.SumIf(Rows(1), "<0", Rows(1))
Debug.Print x
End Sub

365 :デフォルトの名無しさん:2017/01/27(金) 05:30:31.67 ID:0Brpc+WL.net
>>363
Sub test()
  Cells(1, 6) = 0
  x = 1
  Do While x <= 5
    If Cells(1, x) < 0 Then
      Cells(1, 6) = Cells(1, 6) + Cells(1, x)
    End If
    x = x + 1
  Loop
End Sub

366 :デフォルトの名無しさん:2017/01/27(金) 09:12:54.82 ID:xuyo3rho.net
入門サイトなどに同じ事例が見当たらなかったのでお願い致します。

セルに"/"(スラッシュ半角)か"×"(バツ)を入力したら、
そのセルに右上がりの斜線を自動で引かれるようにしたいのですが、
コードを教えてください。

スラッシュを消したら斜線も消えるようにもしたいです。
対象はSheet1の全セルです。

よろしくおねがいします。

367 :デフォルトの名無しさん:2017/01/27(金) 09:21:50.43 ID:E/4Vr26G.net
sumif(r1,”<0”)

368 :デフォルトの名無しさん:2017/01/27(金) 09:57:52.06 ID:Ne4o/N/h.net
>>366
そんなのより対象セルを選択した状態で {ctrl + なんとか} の方が便利だしコードも簡単になると思うけどな

369 :デフォルトの名無しさん:2017/01/27(金) 12:55:33.52 ID:2/l+3kL4.net
http://members.jcom.home.ne.jp/kogumax/page022.html

370 :デフォルトの名無しさん:2017/01/27(金) 14:20:38.90 ID:pYLJsuuu.net
>>366
worksheetのchangeイベントかなんかでセルの値がかわったら罫線引くようにするしかないんじゃね
罫線の引き方はマクロの記録で調べなさいよ

371 :デフォルトの名無しさん:2017/01/27(金) 19:39:13.72 ID:2UbAAj3q.net
>>366
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Value = "/" Then
With Target
.Borders.Weight = xlThin
.Borders(xlDiagonalUp).LineStyle = xlContinuous
End With
End If
End Sub

消すのは逆をすればいいんでない?

372 :デフォルトの名無しさん:2017/01/27(金) 20:32:43.21 ID:WmIjEyaD.net
>>366
条件付き書式でいいだろ
って思ったら条件付き書式って斜め罫線ダメなんだな
他の罫線はいいのにちょっと不思議

なので Sheet1 のシートモジュールにこれを書けばいい

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cell As Range
For Each Cell In Target
Cell.Borders(xlDiagonalUp).LineStyle = IIf(Cell.Value = "/" Or Cell.Value ="×" , xlContinuous, xlNone)
Next
End Sub

373 :デフォルトの名無しさん:2017/01/27(金) 22:47:33.41 ID:Fb1FgEo2.net
>>366がやりたいのは本当にそれだけなんだろうか

374 :デフォルトの名無しさん:2017/01/27(金) 22:49:12.60 ID:2UbAAj3q.net
>>373
コード書きながらそう思ったよw

375 :デフォルトの名無しさん:2017/01/28(土) 12:01:46.67 ID:w/mx7yyO.net
セルの値が一定の書式に合致しているかをVBAで調べるにはどうしますか?
下記は調べたい書式のほんの一例です。実際に調べたい書式はもっとありますし将来的にもどんどん出てきます。

・文字列に、数字+"/"の数字を含む (例)予定は2/3
・文字列が、"平成"ではじまる (例)平成元年
・文字列に、2文字以上の空白を含む (例)I have a pen.
などなど

つまり正規表現のようなものをVBAのコードで使うときの定番ってなんでしょうか?

376 :デフォルトの名無しさん:2017/01/28(土) 12:03:39.31 ID:w/mx7yyO.net
instr関数やleft, mid, right, len関数のようなものを駆使するのが正当かもしれませんが
もっと短く一般的にできる方法はないかと思って。

377 :デフォルトの名無しさん:2017/01/28(土) 12:07:32.57 ID:BY939/WJ.net
>>375
簡単なものなら Like演算子
本格的にやりたいなら正規表現オブジェクトを使う

正規表現オブジェクトは
"Microsoft VBScript Regular Expressions"を参照設定するか
Set RegExp = CreateObject("VBScript.RegExp")

378 :デフォルトの名無しさん:2017/01/28(土) 12:21:25.10 ID:w/mx7yyO.net
>>377
なるほどLikeがござったか。ありがとう。

379 :デフォルトの名無しさん:2017/01/28(土) 12:25:02.06 ID:ktdFkm2m.net
>>378
侍かな

380 :デフォルトの名無しさん:2017/01/28(土) 12:27:02.94 ID:w/mx7yyO.net
このLikeの機能はWordの検索のワイルドカードと完全に互換性があるでござるか?

381 :デフォルトの名無しさん:2017/01/28(土) 12:42:49.48 ID:9EkLNFiw.net
https://www.youtube.com/watch?v=quIHgwuF6r4&sns=em

382 :デフォルトの名無しさん:2017/01/28(土) 21:50:14.17 ID:d5Th95j2.net
今月VBAスタンダードに合格したんだけど、本格的な業務利用までの間には深い溝を感じる。

転職を考えているので、職場では自分だけが使うものしかマクロ化出来ない。

今のレベルの自分にオススメの書籍を教えて下さい。書店でじっくり探す時間が無いので。
今持ってるのは公式テキスト、「例題30問と演習70問でしっかり学ぶexcelVBA標準テキスト」です。

目標はぼんやりしているけど、こういうの作れない?と聞かれたら涼しい顔して作れるようになりたい。

383 :デフォルトの名無しさん:2017/01/28(土) 22:22:23.13 ID:F0MmKngE.net
言語の勉強なんてもういいからファウラーやガンマの本を読みなよ
ファウラーのリファクタリングあたりが脱初心者にオススメ
Javaで書かれてるけどVBAでも考え方は同じ

384 :デフォルトの名無しさん:2017/01/28(土) 22:43:36.09 ID:XFsAlNLB.net
業務で使えるようにするには、その業種の実務知識がないと難しいよ
順番が逆なんだよ(システム屋は別だけど)
特に下っ端レベルだと、業務覚える→自動化考える→実装に必要な知識覚える。
これを繰り返すしかない

385 :デフォルトの名無しさん:2017/01/28(土) 22:44:58.87 ID:d5Th95j2.net
>>383
ありがとうございます。
どちらも初めて聞いたのでググりました。
ファウラーのリファクタリング、本当に脱初心者って感じですね。何か重厚そうで少しビビります。
コードの良し悪しも、あまりにもひどいもの以外はよくわからないレベルなので
読んでみようと思います。

386 :デフォルトの名無しさん:2017/01/28(土) 22:56:38.87 ID:HZ4XiulJ.net
データベースは知ってんの?(知ってるのレベルもまぁいろいろあるけど)
VBAで接続してそこからデータを持ってくるとかあるいはexcelのデータをテーブルに入れるとかさ。

知ってるんだったら良し、知らないんだったらフリーのRDBいっくらでもあるんだからそれ入れてADO勉強したら?

387 :デフォルトの名無しさん:2017/01/28(土) 23:06:20.39 ID:d5Th95j2.net
>>384
業務覚える→自動化考える→知識覚える
これが一番なんですが、今の職場で人に影響が及ばない範囲で出来ることはやりきってしまったというか、大して出来ることが無いので。

経理の知識とVBAの知識両方で勝負したいとは思っているのですが
日商簿記2級とVBAスタンダード、どちらも中途半端過ぎて
今勉強するならどの方向かなと迷っているところです。
これ以上はスレ違いですが。

388 :デフォルトの名無しさん:2017/01/28(土) 23:16:20.97 ID:d5Th95j2.net
>>386
よく知りません。
自分の今の状態、マクロの記録に毛が生えたくらいでこの数レスでもわからない単語が続出です。
ADO、フリーで使えるものが多いのは魅力です。ググってきます。

389 :デフォルトの名無しさん:2017/01/28(土) 23:33:58.91 ID:uAPjBDjx.net
馬鹿は死ねよ

390 :デフォルトの名無しさん:2017/01/29(日) 00:15:01.19 ID:xYYwoQBZ.net
業務って何の業務か知らんけど、
扱うデータが多いと、SQLの知識も必要になる。
(処理速度的な理由で)

391 :デフォルトの名無しさん:2017/01/29(日) 00:31:34.31 ID:WKRhYkpm.net
SQLってつなぐまでが壁で
あとはselectだけだろ?

392 :デフォルトの名無しさん:2017/01/29(日) 00:34:44.45 ID:+blbXYZx.net
業務の自動化ある程度問題なくこなせてるならあとはコードの品質だろうね
その手の洪は楽しいよね
一冊くらいしか読んだこと無いけど

393 :デフォルトの名無しさん:2017/01/29(日) 00:34:52.23 ID:xgaFxxwc.net
馬鹿は繋ぐまでに壁なんてあるんだな

394 :デフォルトの名無しさん:2017/01/29(日) 01:19:55.73 ID:8UrWbtOI.net
最近のエクセル業界のトレンドはSQLなんか?

395 :デフォルトの名無しさん:2017/01/29(日) 14:59:17.63 ID:cSvePZMz.net
エクセルでSQLは制約があるし、SQLの有無で差が出るような処理は本格的なデータベースソフト使いたいね。

396 :デフォルトの名無しさん:2017/01/29(日) 15:22:05.76 ID:M0HgmB1M.net
プログラミング入門ならVBAで満足していてもいいけど
普通は生産性の高い他の言語にシフトするよね

397 :デフォルトの名無しさん:2017/01/29(日) 15:28:40.27 ID:Gj2SxjJF.net
お前の普通ではそうなんだろうな

398 :デフォルトの名無しさん:2017/01/29(日) 15:53:56.99 ID:M0HgmB1M.net
俺の普通っていうかみんなそうだぞ
VBAに執着する連中って視野が狭いから周り見えてないんだろうけど

399 :デフォルトの名無しさん:2017/01/29(日) 16:40:53.45 ID:WrrdSNFA.net
根拠もなしに「みんな」って言われてもな

400 :デフォルトの名無しさん:2017/01/29(日) 16:57:33.53 ID:cyG8RQu0.net
ウチの会社で「SQL」なんて言葉を発しようものならボロクソに言われる。
「みんながみんなお前のようなマニアじゃねえんだよ」ってなもんで。去年、元SEでオラクル使いが
入社してきたがすぐに状況を察して「オレ、パソコン全然わかんない」とかトボケてやがるしw

401 :デフォルトの名無しさん:2017/01/29(日) 16:59:25.83 ID:xgaFxxwc.net
>>395
え?制約ってどんな?
馬鹿ばっかな上にこういう知ったかが出て来るクソスレは面白いな。

402 :デフォルトの名無しさん:2017/01/29(日) 17:19:22.35 ID:Urob8xZw.net
>>401
型を指定できないとかじゃね?
関数も全部使えるのか知らないし
自作関数を使えたりするのかも知らない

403 :デフォルトの名無しさん:2017/01/29(日) 18:01:06.86 ID:cSvePZMz.net
>>401
INSERTが不確実だとか読み込める行数に制限があるとか、
空白行が捕まえられないとかDELETE文が使えないとか、割とあるんだけど知らない?

実際にやってみればすぐ分かる事なんだけど、
ほとんどSELECT文しか使えないから手間に対して益が少ないんだよね。

404 :デフォルトの名無しさん:2017/01/29(日) 18:09:45.36 ID:JZZjSwEk.net
>>403
そうだよね。
俺も SELECT 以外はダメだと思ってやめた。
単一オフィス内の事務だったらSQL Server Express で十分だし移行も簡単だと思う。

405 :デフォルトの名無しさん:2017/01/29(日) 18:14:00.80 ID:zuNgR2z5.net
え?
delete文も他も普通に使えるけど。

406 :デフォルトの名無しさん:2017/01/29(日) 18:15:13.50 ID:zuNgR2z5.net
ごめん、データベースがエクセルの場合は知らないや。

407 :デフォルトの名無しさん:2017/01/29(日) 18:39:53.21 ID:M0HgmB1M.net
>>400
ジャップにはよくある文化だね
頑張って追いつくより足引っ張って横並びになろうとする

408 :デフォルトの名無しさん:2017/01/29(日) 18:50:33.75 ID:Nv+lqz67.net
>>403
馬鹿はこれだから。
全部できるだろうが。
お前の馬鹿頭ではできないだけ。

409 :デフォルトの名無しさん:2017/01/29(日) 19:21:57.62 ID:xNqGWhsy.net
>>403
シートに対してのsqlなら
そうだけど。
言及対象あいまいすぎる。

410 :デフォルトの名無しさん:2017/01/29(日) 19:32:30.38 ID:6wGEJq5M.net
>>408
引っ込みつかなくなる前にやめとけ

411 :デフォルトの名無しさん:2017/01/29(日) 19:33:42.10 ID:3OHjeGHP.net
もともとは>>395が始まりだからシートデータに対するSQLに制約がある話をしているのよ

412 :デフォルトの名無しさん:2017/01/29(日) 19:36:11.18 ID:xYYwoQBZ.net
確かに制限あるけど、そこはExcelだからどうにかなる。

413 :デフォルトの名無しさん:2017/01/29(日) 19:55:32.59 ID:8UrWbtOI.net
エクセルのSQLをエクセルでSQLと言ったら誤解されるのも無理はない
というか、わざとやってるくさい

414 :デフォルトの名無しさん:2017/01/29(日) 20:12:03.53 ID:cyG8RQu0.net
>>407
ウンコ臭いぞトンスラー、俺にすんじゃねえ

415 :デフォルトの名無しさん:2017/01/29(日) 20:19:04.92 ID:cSvePZMz.net
>>413
外部のSQLを使えるソフトに繋ぐことが前提だったら、エクセルに依ったSQLの制限があると考える方がおかしいし、
そもそもADOがエクセルに対応しているのであってエクセルがSQLに対応してるわけじゃないんだから「エクセルのSQL」って言い回しにはならない。

416 :デフォルトの名無しさん:2017/01/29(日) 20:36:29.34 ID:xgaFxxwc.net
>>410
ADOも知らない馬鹿頭は黙ってろ

417 :デフォルトの名無しさん:2017/01/29(日) 20:37:42.65 ID:M0HgmB1M.net
VBAオンリーユーザーってやっぱレベル低いね

418 :デフォルトの名無しさん:2017/01/29(日) 20:39:15.31 ID:xgaFxxwc.net
>>415
ADOがExcelに対応してる?
馬鹿は死ねよ。
ADO使わずとも呼び出す方法もあるし、わからん奴が知ったかしてるんじゃねーよ。
お前の頭だからできないだけのことを製品のせいにすんな。

419 :デフォルトの名無しさん:2017/01/29(日) 20:46:40.49 ID:3OHjeGHP.net
どうでもいいけど
 Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}
等した時に制約が多いって話だよな?

420 :デフォルトの名無しさん:2017/01/29(日) 20:55:06.81 ID:cSvePZMz.net
あ、そうか。ODBCが対応してるって言わないと正確じゃないわな。
無自覚に「エクセルからDBソフトに繋ぐ時はADOを使う」って前提に立ってたわ。

421 :デフォルトの名無しさん:2017/01/29(日) 21:02:39.47 ID:Urob8xZw.net
RDBMSを別に立てなくてもエクセルだけでSQLを実行できる
この環境だと色々制約があるんじゃね?

RDBMSを別に立てたらSQLの結果を受け取るだけだし

422 :デフォルトの名無しさん:2017/01/29(日) 21:03:02.19 ID:6wGEJq5M.net
>>416
めんどくせーなー
削除するコード書いてからほざけ

423 :デフォルトの名無しさん:2017/01/29(日) 21:12:07.55 ID:xSN3m+WX.net
>>418
あ、ごめん
罵倒することでしかやりとりできないようなヤツとは関わらないって決めてるので誰にも迷惑のかからないところで勝手に盛り上がっててください

424 :デフォルトの名無しさん:2017/01/29(日) 21:14:54.50 ID:xNqGWhsy.net
>>419
どうでも良いのに
答え求めてわらた

425 :デフォルトの名無しさん:2017/01/29(日) 21:18:43.36 ID:3OHjeGHP.net
>>424
オッ

426 :デフォルトの名無しさん:2017/01/29(日) 21:23:53.48 ID:xgaFxxwc.net
馬鹿頭ばっかだな。ADO使ったdeleteすらできんのか。

427 :デフォルトの名無しさん:2017/01/29(日) 21:42:14.95 ID:M0HgmB1M.net
エクセル使うとどうしてもバカになるから仕方ないね

428 :デフォルトの名無しさん:2017/01/29(日) 21:49:05.82 ID:3OHjeGHP.net
>>400
それで会社として生き残っていけるんならさぞ余裕があるんだろう

...それとも沈みゆく泥舟なのか?

429 :デフォルトの名無しさん:2017/01/29(日) 21:58:25.91 ID:9pGSsNTY.net
情報部門が存在しない小さい会社で、ちょっと詳しい程度の社員がデータ整理を片手間でやってるというか押しつけられてるだけだろ
零細企業の大半はそんなもん
しかも日本に限らん

430 :デフォルトの名無しさん:2017/01/29(日) 22:09:31.30 ID:3OHjeGHP.net
>>429
そこに力を入れてもビジネスチャンスには結びつかん、という判断なのかな

それならOfficeレベルより上は不要かも

431 :デフォルトの名無しさん:2017/01/29(日) 22:40:41.68 ID:h9OztPwg.net
喋りん坊だけのスレで職人技がないね

432 :デフォルトの名無しさん:2017/01/29(日) 22:43:44.35 ID:3OHjeGHP.net
>>431職人技はプロに求めろよw

433 :デフォルトの名無しさん:2017/01/29(日) 22:58:56.73 ID:e2GiLXmE.net
webBrowserコントロール追加したんだけどバージョンがIE7でした
ググって調べたらVBとかC#の情報だったけど、レジストリにWebBrowserControl.exeの名前で値追加する方法があったのでやってみたけど、
バージョン変わりませんでした。
VBAでは方法が違うんでしょうか?

434 :デフォルトの名無しさん:2017/01/29(日) 23:05:16.84 ID:e2GiLXmE.net
ただの勘違いで解決しました
ありがとうございました

435 :デフォルトの名無しさん:2017/01/29(日) 23:12:11.27 ID:xNqGWhsy.net
>>434
礼を言われるほどのことじゃないよ!

436 :デフォルトの名無しさん:2017/01/30(月) 00:49:56.54 ID:Evqo1D2G.net
大企業で情報部門も存在していても、すべて任せるわけにもいかないからな。

437 :デフォルトの名無しさん:2017/01/30(月) 05:04:33.08 ID:6lLneJEZ.net
>>426
>>422

438 :デフォルトの名無しさん:2017/01/30(月) 09:50:19.06 ID:DMFEN635.net
アクセスアップとお小遣い稼ぎの裏技
トラフィックエクスチェンジ
http://tra-chan.jugem.jp/?eid=1

439 :デフォルトの名無しさん:2017/01/30(月) 16:25:14.09 ID:F1tgy4u/.net
like演算子使うとき“[”と“]”ってどうしてる?

440 :デフォルトの名無しさん:2017/01/30(月) 18:29:00.85 ID:mknZdUVz.net
[ ]で囲んでる

441 :デフォルトの名無しさん:2017/01/30(月) 19:40:12.17 ID:EbqBYLP7.net
囲わなきゃいけないのは W[W だけで、 W]W の方はどうでも良いんじゃなかったっけ?

442 :デフォルトの名無しさん:2017/01/30(月) 20:12:58.87 ID:dKn8bdIS.net
>>428
まあ、一般企業じゃないから(なんちゃら組合ってやつ)潰れる事はないだろうが、今時経理も帳簿と電卓、ボールペンだし
財務会計ソフトを導入したもののソフトに入力しながら電卓で検算してるしw
「コンピューターは信用できない」とか総務のお局様が言ってるからどうにもならん。
オレは自分の業務に使うものは自分でマクロ書いて定時で帰れるようにしてるが、他の連中は「画像3000枚に一つずつ!連番を振って
徹夜した」とか差し込み印刷を教えても「そんなズボラなやり方はダメだ」と言ってテンプレートに入力→印刷→テンプレートを初期化を200件朝までやってたとか
それが50代とかじゃなく30代のバリバリ中堅どころなんだから笑うしかねえわ

443 :デフォルトの名無しさん:2017/01/30(月) 20:16:47.37 ID:4xfdjQgw.net
無職をこじらせるとこうなるのか。

444 :デフォルトの名無しさん:2017/01/30(月) 21:03:40.38 ID:F1tgy4u/.net
>>440
なるほど
でもそれだと“[”を含む、しかできなくない?
まあ詳しく調べるならInStr使えばいいんだけどさw

445 :デフォルトの名無しさん:2017/01/30(月) 21:14:54.19 ID:QDHU/4vl.net
>>442
私も定時で帰る手段としてのプログラミング同感
今時、できの悪い奴らの根性語り、、恥ずくないのか!w

446 :デフォルトの名無しさん:2017/01/30(月) 21:19:02.65 ID:EeAzQJfr.net
>>442みたいな会社がまだこの日本にあるんだw

447 :デフォルトの名無しさん:2017/01/30(月) 21:39:41.37 ID:dJWPhbF6.net
>>446
全体的な学力の低下の影響で応用の利かないバカはむしろ増えてる

448 :デフォルトの名無しさん:2017/01/30(月) 21:42:30.27 ID:UfG8r5Q5.net
言われたことを言われたままにやるやつが増えてるとは感じる
学歴高くても頭使わないやつが多すぎる

449 :デフォルトの名無しさん:2017/01/30(月) 22:05:07.29 ID:gqMuGKk3.net
学歴と学力

450 :デフォルトの名無しさん:2017/01/30(月) 22:34:24.19 ID:DRq3TNDG.net
年寄りくさい奴らだ

451 :デフォルトの名無しさん:2017/01/30(月) 23:59:13.06 ID:pve8veDd.net
能力あっても出世できるかわからん社会だからなぁ
能力ひけらかすより足並み揃えて今の仕事をやりすぎずサボりすぎずぐらいに維持する方が全体の利益になるんだよ

452 :デフォルトの名無しさん:2017/01/31(火) 00:10:36.51 ID:W4oCxLcQ.net
起業すればええ

453 :デフォルトの名無しさん:2017/01/31(火) 04:45:25.89 ID:7lVbi0HF.net
>>451
全体の利益になるの全体ってどの範囲
自分?自チーム?自部門?自社?自事業界?
海外も含めて考慮すると?

454 :デフォルトの名無しさん:2017/01/31(火) 14:09:13.37 ID:W2MQjnqi.net
どうやっていても期日には間に合っているなら自部門くらいまでじゃないかな
その先はどっちでも不利益になるわけでなし

455 :デフォルトの名無しさん:2017/02/01(水) 21:42:36.25 ID:UlFFF3K3.net
久しぶりにこのスレ覗いたら
馬鹿馬鹿言ってる無教養者が踊っててワロタw

いやー、多分EXCELのシートやCSVファイルにSQL投げたことないんだろうね。

456 :デフォルトの名無しさん:2017/02/01(水) 21:51:20.22 ID:PbjZqAWj.net
SQL投げるって言いたい盛りですので

457 :デフォルトの名無しさん:2017/02/01(水) 22:06:49.07 ID:TAfVniq5.net
馬鹿は用語を正確に使えないからね

458 :デフォルトの名無しさん:2017/02/01(水) 23:10:08.02 ID:YqrNMNH4.net
ていうかわざと曖昧に言ってるだろ?

459 :デフォルトの名無しさん:2017/02/02(木) 00:50:04.16 ID:26wow3Y8.net
deleteができない無能君が煽って教えて貰おうとしてるんだろ

460 :デフォルトの名無しさん:2017/02/02(木) 06:35:42.81 ID:oZoqJ5pi.net
煽りじゃなく、SQLだけでエクセルシート上からDELETEする方法があるなら知りたい。
今のところ主要な数値を無効な値へUPDATEするくらいしか有効な手段がないんだよね。

461 :デフォルトの名無しさん:2017/02/02(木) 07:39:32.18 ID:eC+H4ibC.net
アクセス使えよ

462 :デフォルトの名無しさん:2017/02/02(木) 08:08:18.85 ID:mHe9v9aT.net
>>461
この人バカじゃん

463 :デフォルトの名無しさん:2017/02/02(木) 08:40:21.34 ID:6HuXGQiF.net
ここExcel VBAスレだからなぁ

464 :デフォルトの名無しさん:2017/02/02(木) 10:49:25.90 ID:/oce7NjA.net
>>460
どういう方法でやってダメだった?
自分は素のODBCでやってダメだったけどADOは知らず。

465 :デフォルトの名無しさん:2017/02/02(木) 18:21:07.45 ID:qO0hDPsp.net
delete できると言ってる奴はコード出せないから察してやってくれ

466 :デフォルトの名無しさん:2017/02/02(木) 18:21:37.93 ID:ZUZ0NvC+.net
せめてExcelからDB叩いて結果だけシートに貼ろうよ
シートに数万行って重いだけだし恐らく使い方間違ってるよ

467 :デフォルトの名無しさん:2017/02/02(木) 18:31:42.95 ID:aDxFABtY.net
>>466
色々と制約があるんじゃね

468 :デフォルトの名無しさん:2017/02/02(木) 18:39:17.04 ID:OxqW0VIp.net
行削除は無理みたいね。
https://support.microsoft.com/ja-jp/help/316934/how-to-use-ado.net-to-retrieve-and-modify-records-in-an-excel-workbook-with-visual-basic-.net
> 削除操作を実行しようとすると、次のエラー メッセージが表示されます。
> ---
> この ISAM では、リンク テーブル内のデータを削除することはサポートされていません。
> ---
> この制限は、Excel ブックをデータベースとして扱う場合に固有です。

469 :デフォルトの名無しさん:2017/02/02(木) 18:47:16.11 ID:26wow3Y8.net
>>467
制約なんかねーよ

470 :デフォルトの名無しさん:2017/02/02(木) 18:51:25.47 ID:aDxFABtY.net
>>469
なんで他の職場環境の事を断言できるんだw

471 :デフォルトの名無しさん:2017/02/02(木) 19:03:14.33 ID:26wow3Y8.net
>>470
ああ、ソフト的ではなく環境的にということね

472 :デフォルトの名無しさん:2017/02/02(木) 19:37:44.37 ID:NSv6UvRa.net
>>471
わざわざエクセルをDBに使うなんてそういうことやろ

473 :デフォルトの名無しさん:2017/02/02(木) 19:45:16.92 ID:26wow3Y8.net
>>472
daoを使えばできるのに使えない人じゃないか?

474 :デフォルトの名無しさん:2017/02/02(木) 19:50:07.70 ID:/oce7NjA.net
出来ると言ってるやつは
「いますぐマスターすべきExcelシートにDELETE文を発行する10の方法」
という記事をQIITAに書け。

475 :デフォルトの名無しさん:2017/02/02(木) 20:02:10.03 ID:oZoqJ5pi.net
「エクセルブックをデータベースとして利用する方法は知っているけど、
Accessその他のDBソフトに繋いで利用する方法は知らない」

ってどんな確率だよ。

476 :デフォルトの名無しさん:2017/02/02(木) 20:07:41.61 ID:/oce7NjA.net
>>475
そうだなあ、、、

・エクセルしかない環境
とか、
・データ入力者は別にいて、そいつがエクセルしか使わない
とか?

477 :デフォルトの名無しさん:2017/02/02(木) 20:15:04.31 ID:bpSSgRJM.net
ADOもDAOもミドル層の話だからな
>>468によれば、Microsoft.Jet.OLEDB.4.0では削除できないみたいだけど
出来るって言ってるやつも出来ないって言ってるやつも、ドライバ(プロパイダ)明示しろや

478 :デフォルトの名無しさん:2017/02/02(木) 21:51:23.00 ID:TcNEtgX9.net
君たちは本当にSQLを愛しているんだな

479 :デフォルトの名無しさん:2017/02/02(木) 23:04:57.75 ID:JuktWcDi.net
>>462
完全にエクセルでDBの方がバカなんだけど
もしかしてExcel VBAでAccess使っちゃダメみたいなローカルルールがあんの?

480 :デフォルトの名無しさん:2017/02/02(木) 23:41:12.27 ID:yoXwSHRo.net
エクセルにクエリ投げてデータ取ってくるの便利といえば便利なんだけど
a1セルからデータ始まってない場合とかどうすんだ?
表形式ですらない場合のほうが多いし

481 :デフォルトの名無しさん:2017/02/03(金) 04:47:43.76 ID:OWBaaXVb.net
>>479
DELETEさえ使えればエクセル単体でDB処理が完結するから便利なんだよ。
これ一つ使えないせいで仕方なく外部のDB使ってる場合が多いと思う。
発想が逆というか、話の前提条件というか。

まぁ、そもそも出来ない事を出来ると主張した奴が悪いんだけどね。

482 :デフォルトの名無しさん:2017/02/03(金) 07:06:56.58 ID:XP7JqKvc.net
>>479
excelだけでやることに意味があることもおおいだろ
少しは頭使え

483 :デフォルトの名無しさん:2017/02/03(金) 07:18:59.91 ID:2s9sq5BM.net
SQL Server Express でいいじゃん。タダだし楽ちんだ。

484 :デフォルトの名無しさん:2017/02/03(金) 08:15:27.01 ID:Ibd8YbHy.net
>>479
普通の会社なら Excel が入っていない PC は滅多にないけど Access が入ってないことはよくある

485 :デフォルトの名無しさん:2017/02/03(金) 08:17:25.72 ID:6hF18qg4.net
>>461
>>480
できるようにしろよ
お前は雛かw

486 :デフォルトの名無しさん:2017/02/03(金) 08:18:24.35 ID:jCN45Z8M.net
>>484
だよね
うちも情シス課だけだ

487 :デフォルトの名無しさん:2017/02/03(金) 10:15:04.35 ID:jamIg+V1.net
Microsoft Access 2013 Runtime

488 :デフォルトの名無しさん:2017/02/03(金) 22:34:23.19 ID:zw5JONDs.net
>>480
実は問題ない。
SELECT * FROMで全部拾うと、
勝手に列名書き足してくれるから。

こんな感じの、すげぇダッセェwwwシートになるけど。

F1 F2 F3 F4 F5 F6 F7 F8 F9 F10
                   2017/2/3
      ○○○一覧

No 商品名 単価 数量 合計 備考
1  ▲▲   100   2  200 □□
2  ◎◎   500   1  500 ▽▽
3  ××   320   2  640 ◆◆

後でRows("1:4").Deleteしてもいいし、
そもそも項目をF1 AS [No]とかにして、
WHEREで余計なところを消してもいい。

489 :デフォルトの名無しさん:2017/02/04(土) 00:03:57.13 ID:L9lbN/6P.net
1つプロパティをLet Getするだけで、6行も使っちゃうんだけど、
何とかならんだろうか。
10個あったら60行っすよ。

490 :デフォルトの名無しさん:2017/02/04(土) 00:23:48.42 ID:IKUGnnqZ.net
ユーザーフォームのトグルボタンをいくつか作成
IFで指定した列が表示が表示されてるならValueをTrue(押されてる状態)にするという処理を書いています
その後の処理のためにイベントプロージャーで、トグルボタンをクリックすると列の表示、非表示を指定できるようにしていますが、最初のIF文でもイベントプロージャーを実行してしまいます
何か回避策ありませんか?

491 :デフォルトの名無しさん:2017/02/04(土) 01:50:33.82 ID:DTJgp/8V.net
>>489
Let Get合わせて最低2行だろjk

492 :デフォルトの名無しさん:2017/02/04(土) 01:52:48.86 ID:keYK1J0l.net
イベントの再入を防ぎたいんだよな
なんちゃらEnableみたいなのがあったけど思いだせん
自分でぐぐってくれ

493 :デフォルトの名無しさん:2017/02/04(土) 03:27:18.53 ID:DTJgp/8V.net
>>490
イベントを禁止できないけど こうゆうのどう?

If ToggleButton1.Value = False Then
  ToggleButton1.Tag = 1
  ToggleButton1.Value = True
End If


Private Sub ToggleButton1_Click()
If ToggleButton1.Tag <> "" Then
  ToggleButton1.Tag = ""
  Exit Sub
End If

'処理

End Sub

494 :デフォルトの名無しさん:2017/02/04(土) 05:14:57.71 ID:XGGN10p2.net
質問です。
OracleDBのテーブルにあるCLOBフィールドに格納
されたExcelファイルにアクセスしてReadOnlyで開くか
ダウンロードするかしたいと考えています。
テーブル仕様書を見ると、CLOBにXMLTypeで格納され
ているとあります。
DBMS_LOB.SubStr()でVARCHAR2に変換して
先頭数文字取得しようとするのですがエラーでこけます。
GGって良い事例がないか捜しているのですがうまく見つけ
られません。VBAで可能でしょうか?
ODBC(Excel Driver)またはOraDynasetは利用できる
環境にあります。

495 :デフォルトの名無しさん:2017/02/04(土) 11:23:15.74 ID:R/BCzGYY.net
>>489
アクセサ云々より先に継承だからなあ

496 :デフォルトの名無しさん:2017/02/04(土) 11:37:21.42 ID:O5nNdZ1M.net
>>489
たくさんあったら使う側も面倒なんだからひとつのメソッドで同時に設定すればいいんじゃない?
相互依存のない独立したプロパティが10個あるクラスだとしたら設計がまずいか、相当なレアケースのどちらか。

497 :デフォルトの名無しさん:2017/02/04(土) 12:40:09.24 ID:pgmrL8Re.net
>>489
改行しないで二行でかけ

498 :デフォルトの名無しさん:2017/02/04(土) 13:20:38.95 ID:R/BCzGYY.net
コロンで繋げば一行で書けるな、確かに

499 :デフォルトの名無しさん:2017/02/04(土) 15:59:29.14 ID:4MwsZCTu.net
質問します
一つ目の画像を縦横の短い長さでクロップしたいのですが
どこがまちがっているのでしょうか

Sub 画像をクロップして正方形にしたい()
Dim myPic As Shape
Set myPic = ActiveSheet.Shapes(1)
With myPic
TateYokoSa = Abs(.Height - .Width)
If .Height > .Width Then
.PictureFormat.CropBottom = .PictureFormat.CropBottom + TateYokoSa
Else
.PictureFormat.CropRight = .PictureFormat.CropRight + TateYokoSa
End If
End With
End Sub

500 :デフォルトの名無しさん:2017/02/04(土) 17:00:11.13 ID:OKds5wOX.net
>>494
文字コードじゃなくて?

501 :デフォルトの名無しさん:2017/02/04(土) 19:06:45.66 ID:L9lbN/6P.net
>>491
>>497
>>498
Property Let
 内容
End Property
Property Get
 内容
End Property

ググっても、こういう書き方しか見つからない・・・。

>>496
クラス.名前
クラス.部署
クラス.年齢
クラス.性別
   ・
   ・
的な使い方をしたいんだけど、変?

502 :デフォルトの名無しさん:2017/02/04(土) 19:11:21.46 ID:hnMbbMl2.net
>>501
Property Let : {...} : End Property

って書き方でしょ。
どっちにしろ単純なメンバー変数の読み書きをいちいちメソッド化してもなぁ。

503 :デフォルトの名無しさん:2017/02/04(土) 19:35:42.95 ID:ypmLJyxS.net
>>501
C#使いなよ

504 :デフォルトの名無しさん:2017/02/04(土) 19:55:29.16 ID:nIvSnu1n.net
>>501
letもgetもあるなら、クラスの中にpublic変数作った方が良い。
隠蔽的にはなんの役にも立たないけど。

505 :デフォルトの名無しさん:2017/02/04(土) 20:04:50.83 ID:R/BCzGYY.net
>>501
変数の初期値設定とかでもよくやるけど
Dim c as class1:set c=new class1
とかね

506 :デフォルトの名無しさん:2017/02/04(土) 20:17:51.11 ID:L9lbN/6P.net
>>502
目から鱗。
コロンは知ってたけど、まさか最初と最後にも使えるとは思わなかった。
ありがとう。

507 :デフォルトの名無しさん:2017/02/04(土) 20:42:11.57 ID:pJMir97a.net
>>505
> Dim c as class1:set c=new class1
そのパターンは
Dim c As New class1
でよくね?

508 :デフォルトの名無しさん:2017/02/04(土) 20:55:01.33 ID:O5nNdZ1M.net
>>507
いいと思うけどなぜか嫌う人もいる

509 :デフォルトの名無しさん:2017/02/04(土) 20:57:38.63 ID:TSeQ29q+.net
宣言と代入を分けたいタイプ

510 :デフォルトの名無しさん:2017/02/04(土) 21:02:39.21 ID:O5nNdZ1M.net
ああこれだ
https://msdn.microsoft.com/ja-jp/library/dd297716.aspx

511 :デフォルトの名無しさん:2017/02/04(土) 21:17:54.19 ID:O5nNdZ1M.net
>>509
宣言と同時に初期化(≠代入)したい、ってことでしょ

512 :デフォルトの名無しさん:2017/02/04(土) 21:49:00.67 ID:pJMir97a.net
>>510
ほえー、これは知らんかったわ
なんでこんな凝ったことするかねぇ...

513 :デフォルトの名無しさん:2017/02/04(土) 22:12:26.08 ID:R/BCzGYY.net
>>507
もう出てるけどコンストラクタが働かない

514 :デフォルトの名無しさん:2017/02/05(日) 10:29:00.78 ID:7v2W1cWr.net
>>499
多分この仕様のせいかと
https://msdn.microsoft.com/ja-jp/library/office/ff838027.aspx
>トリミングは、元の図の大きさを基に計算されます。
>たとえば、元の図が高さ 100 ポイントの場合に、それを 200 ポイントに変更して、
>CropBottom プロパティに 50 を設定すると、
>図の下端からトリミングされるのは 50 ポイントではなく 100 ポイントとなります。

だから↓のような処理にすればよくね?
現在のサイズを保存 → オリジナルサイズに戻す → Crop → Cropしてない方のサイズに戻す

515 :デフォルトの名無しさん:2017/02/05(日) 18:56:44.11 ID:qj78kXRn.net
>>514
ありがとうございます 一発で解決しました
変な仕様だとおもったけど拡大縮小を考えたら
こっちのほうが誤差がでなくて使いまわしがいいのかも

516 :デフォルトの名無しさん:2017/02/06(月) 12:18:45.75 ID:Xnyr5yqp.net
>>493
ありがとうございます!
無事想定通りに動きました!

517 :デフォルトの名無しさん:2017/02/06(月) 15:58:56.02 ID:6lEgfPNZ.net
これできるとどんないいことあるん?

518 :デフォルトの名無しさん:2017/02/07(火) 21:15:01.23 ID:0h02j8pV.net
エクセルでお聞きしたいのですが
簡易CTIをエクセルで作りたいと思ってます
パソコンに繋いでいるfomaの着信を拾って相手の発信番号を取得するにはどうすれば良いでしょうか?

com3ポートに認識されていたのでterateamで接続しATコマンドでの発着信はできました

vbaでの操作ではCOMポートにATコマンドを入力して発信はできました

なんとか自力でココまで調べましたが、肝心の着信を拾う方法が一向に分かりません•••

何方か教えて頂けませんでしょうか

519 :デフォルトの名無しさん:2017/02/07(火) 21:26:24.63 ID:obnTOw8Y.net
PCで起こったイベントをVBAで受けとるの無理じゃね?
できるなら俺も教えてほしい
煽りとかじゃなくて

520 :デフォルトの名無しさん:2017/02/07(火) 21:33:09.15 ID:71skcbUj.net
仕様をオープンにしてる機器じゃないとデータ取れなかった記憶があるが
232Cアナライザーでどんな通信してるかバイパスして見るとかいう手もある
http://www.fullfree.jp/i/cti/%E6%90%BA%E5%B8%AF%E9%9B%BB%E8%A9%B1/
対象機器なら ↑ こういう手もあるかも

521 :デフォルトの名無しさん:2017/02/07(火) 21:45:01.70 ID:K6SNK3fF.net
また馬鹿が来た

522 :デフォルトの名無しさん:2017/02/07(火) 22:41:07.72 ID:4GsqGq1T.net
ファイルが関数で重いため、入力用のシートと関数用のシートに分けてます。計算したいときだけシートを計算するようにしてます。
しかし起動時に勝手に計算してしまうことがあります。(計算されないこともある)原因がわかる方がいたら教えてくださいm(__)m
マクロ勉強中なので変なこと描いてるかもしれませんが、お手柔らかにお願いします。


Private Sub Workbook_Open()
Worksheets(計算シート1).EnableCalculation = False
Worksheets(計算シート2).EnableCalculation = False
End Sub

Sub 再計算()
Worksheets(計算シート1).EnableCalculation = True
Worksheets(計算シート2).EnableCalculation = True
Calculate
Worksheets(計算シート1).EnableCalculation = False
Worksheets(計算シート2).EnableCalculation = False
End Sub

523 :デフォルトの名無しさん:2017/02/07(火) 22:42:44.62 ID:4GsqGq1T.net
>>522
EXCEL2007 windows7です。

524 :デフォルトの名無しさん:2017/02/07(火) 22:47:36.56 ID:vzZ8DTGh.net
>>522


数式再計算を止める
Application.Calculation = xlCalculationManual
Application.Calculation = xlCalculationAutomatic

「.Calculation」と「.EnableCalculation」のどちらが効果的か
http://stabucky.com/wp/archives/6840


.EnableCalculationってのは初めて知ったw

525 :デフォルトの名無しさん:2017/02/07(火) 22:49:15.03 ID:0h02j8pV.net
>>520
fullfreeは試しに使って見ました
通知も上手く動くので大変良いのですが、本格的に使うには有料版を買わなきゃいけないのです•••
VB.netで似たようなものなら作れるのかな

526 :デフォルトの名無しさん:2017/02/07(火) 22:56:00.49 ID:kg1BFKbj.net
msの文章まんまだけれど

ファイル名 ドキュメントの種類 計算方法
------------------------------------------------------
Auto1.xls Workbook 自動
Manual1.xls Workbook 手動
Auto2.xls Workbook 自動

Excel の計算方法は、次の各条件を適用して決定されます。

最初に開かれるドキュメントでは、そのドキュメントで最後に保存された計算方法が使用されます。以降に開かれるドキュメントでは、同じ計算方法が使用されます。

たとえば、Auto1.xls を開いてから Manual1.xls を開く場合は、両方のドキュメントで自動の計算方法 (Auto1.xls で使用されていた計算方法) が使用されます。Manual1.xls を開いてから Auto1.xls を開く場合は、両方のドキュメントで手動の計算方法が使用されます。

事前に何かのブックを開いている…ってのはないのかな

527 :デフォルトの名無しさん:2017/02/07(火) 22:57:33.27 ID:4GsqGq1T.net
>>524
回答ありがとうございます。
前はそっちでやってたんですけど、結果は同じでした。
それにexcel自体を全て手動計算にしている状態で別のexcelファイルを開くと、後から開いたEXCELファイルも手動になってしまうので、それは辞めました。
アクティブ状態のとき手動計算。非アクティブのとき自動計算にするっていう感じでごまかしていたんてすけど、それでも他のファイルがアクティブのときは重くなってしまうのでエクセル全体の手動計算化は諦めたんです。

528 :デフォルトの名無しさん:2017/02/07(火) 23:13:44.54 ID:4GsqGq1T.net
>>526
それもあり得ると思ってそのファイル以外は開かないようにしていろいろ試しているんですけど、たまに起動時に自動計算してしまいます。

上記の再計算マクロを実行したときに、次回起動時に再計算されることが多い気がします。

あと変わったことといえば、保存時にバックアップファイルを作成すると、読み取り専用で開くを推奨するにチェックを入れてます。

529 :デフォルトの名無しさん:2017/02/07(火) 23:22:48.13 ID:diTiDCUQ.net
>>518
どう繋いでるのか知らんけど
AT+CMR=3,0,0,1,0
で非請求リザルトコードを送出するようにして
AT+CLIP=1
で相手先の番号通知をするようにしておけば電話がかかってきたらリザルトコードと電話番号が送られてくるはず
https://www.nttdocomo.co.jp/binary/pdf/corporate/technology/document/foma/foma8.pdf

530 :デフォルトの名無しさん:2017/02/08(水) 00:37:33.33 ID:ZVPHpwbP.net
どう考えても、セルよりソルかゾルの方がカッコいいよな。
Zolls(4,2).Value= "あ"
みたいな。

何でかというと、サム(SUM)も、ザム(ZAM)にしたほうがカッコイイからです。
なので、LEN→ZEN、LEFT→LEVT、IF→IVEに直ることを望みます。

531 :デフォルトの名無しさん:2017/02/08(水) 00:44:56.28 ID:JHaqns+X.net
どう考えても意味が通じなくなるよな

何でかというと、SUM(和)も、動きと意味を同じにしているからです。

532 :デフォルトの名無しさん:2017/02/08(水) 01:23:44.42 ID:gxc/oAA1.net
サムって書くとアメリカ人の名前みてーだなや

533 :デフォルトの名無しさん:2017/02/08(水) 12:32:13.51 ID:YRaicT0y.net
>>530
前向きに善処します

534 :デフォルトの名無しさん:2017/02/08(水) 15:05:50.71 ID:jpNr2q1t.net
サムプロダクトって毎回?????
だからやめて欲しい
何度説明読んでも覚えられない

535 :デフォルトの名無しさん:2017/02/08(水) 16:01:16.01 ID:GSna8Pfo.net
>>534
SUMPRODUCT っていう名前の事? 機能の事? どっちを言ってる?

機能の事なら覚えるしかないけど
名前の事なら
VBEのインテリジェンス や 数式オートコンプリートで候補表示されるがな

536 :デフォルトの名無しさん:2017/02/08(水) 17:02:26.93 ID:jpNr2q1t.net
サムプロダクトって名前からどういう機能だったかって連想ができない

537 :デフォルトの名無しさん:2017/02/08(水) 17:26:17.93 ID:G5M1Oque.net
積の和ってそのままじゃないかな?

538 :デフォルトの名無しさん:2017/02/08(水) 20:23:45.21 ID:PsLw780Z.net
>>535
インテリセンスな

539 :デフォルトの名無しさん:2017/02/08(水) 20:28:50.62 ID:xdFvHyj9.net
>>538
そういう英単語はないのですが。

540 :デフォルトの名無しさん:2017/02/08(水) 20:31:43.60 ID:ahyxJIg+.net
なかったら作ればいいじゃない
インゲマルセンス

541 :デフォルトの名無しさん:2017/02/08(水) 20:35:58.20 ID:YRaicT0y.net
>>536
そんなに馬鹿をご披露しなくても。
見ててしんどすぎるw

542 :デフォルトの名無しさん:2017/02/08(水) 20:36:09.45 ID:KwXJn1Y4.net
>>539
辞典に載ってる
http://www.weblio.jp/content/%E3%82%A4%E3%83%B3%E3%83%86%E3%83%AA%E3%82%BB%E3%83%B3%E3%82%B9
http://e-words.jp/w/%E3%82%A4%E3%83%B3%E3%83%86%E3%83%AA%E3%82%BB%E3%83%B3%E3%82%B9.html

543 :デフォルトの名無しさん:2017/02/08(水) 21:17:52.74 ID:J3ugy/jR.net
>>535
そうだな。INNERPRODUCTって名前にすべきではあるな。

544 :デフォルトの名無しさん:2017/02/08(水) 21:18:25.45 ID:J3ugy/jR.net
間違えた
>>534

545 :デフォルトの名無しさん:2017/02/08(水) 22:10:27.54 ID:ycePkqqk.net
関数も漢字表示にすれば良いんだよ
LEN→文字数
LEFT→左
SUM→和
SUMPRODUCT→積の和

546 :デフォルトの名無しさん:2017/02/08(水) 22:42:52.80 ID:2zqqayOY.net
秘密 関数 殺(参照 相手) 的 真偽値

547 :デフォルトの名無しさん:2017/02/08(水) 22:47:04.89 ID:DZJYY/gu.net
B列のセルの値の取り得るデータは
・空白
・日付    例:2017/01/0
・A701-01  英字&3桁数字&ハイフン&2桁数字

B列の複数行をピンポントで選択して、マクロを実行
・空白、日付の場合は、なにもしない
・A701-01 → A701-01+1 「+1」の部分を追加
「+1」部分についてはマクロボタンを区別して「+0」〜「+5」をそれぞれ選べるようにする

作ってみたのが↓

 Sub Plus1()
 '
 ' セルの文字列に”+1”を追加する
 '
 Dim cell As Range
 For Each cell In Selection
  cell.Formula = Left(cell, 7) & "+1"
 Next

これだと、選択したセルの値に強制的に「+1」を付加することができるけど
まずB列以外を誤って選択した場合、実行をキャンセルする
空白もしくは日付データのセルを誤って選択した場合スキップする
という条件が未設定なわけですが

初心者のため、やり方が解りません
何卒ご教授お願いします

548 :デフォルトの名無しさん:2017/02/08(水) 22:55:24.84 ID:PsLw780Z.net
>>547
Sub test1()
  If Selection.Columns.Count = 1 And Selection.Column = 2 Then
    For Each cell In Selection
      If Len(cell.Text) = 7 Then
        cell.Value = cell.Text & "+1"
      End If
    Next
  End If
End Sub

549 :デフォルトの名無しさん:2017/02/08(水) 23:32:27.61 ID:DZJYY/gu.net
ヒントを頂き有り難うございました

日付チェックは難しそうなのでパスしました

列チェック、ブランクチェックはOK

550 :デフォルトの名無しさん:2017/02/08(水) 23:43:38.04 ID:G5M1Oque.net
>>549
データ左端の文字が英文字の場合のみ処理すればよい

551 :デフォルトの名無しさん:2017/02/08(水) 23:56:03.18 ID:ZVPHpwbP.net
For 〜 Next の中に、
クラスモジュールでプロパティゲトォした値を入れると、遅くなりますか?
(1ループ毎にゲトォしやがりますか?)
普通の変数の方がいい?

552 :デフォルトの名無しさん:2017/02/08(水) 23:57:41.36 ID:2zqqayOY.net
>>549
A1に 2017/2/8 (日付)
A2に '2017/2/8 (日付に似た文字列)
を入れた場合、

TypeName([A1].Value) は Date
TypeName([A2].Value) は String

VarType([A1].Value) は  7
VarType([A2].Value) は 8

IsDate([A1].Value) は True
IsDate([A2].Value) は True

目的に応じて。

553 :デフォルトの名無しさん:2017/02/09(木) 08:11:20.26 ID:qBnVMklj.net
>>551
それぐらい自分で試せるでしょ

554 :デフォルトの名無しさん:2017/02/09(木) 09:20:05.90 ID:kHCI6X3g.net
>>551
速いは遅いは
そりゃ偉い騒ぎよ

555 :デフォルトの名無しさん:2017/02/09(木) 12:46:25.09 ID:vKLMa/HO.net
タイトル行ともう一行を別シートに書き出していくマクロを作りたいのですが、タイトル行が書き出せなくて困ってます
ご教授願えませんでしょうか...

Sub Macro2()
Dim orgWs As Worksheet
Dim idx As Long
  Set orgWs = ActiveSheet
  Application.ScreenUpdating = False
  For idx = 1 To Range("A65536").End(xlUp).Row
    Worksheets.Add after:=Sheets(Worksheets.Count)
    orgWs.Rows(idx).Copy
    Range("A1").PasteSpecial Paste:=xlPasteAll, Transpose:=True
'    ActiveSheet.Name = orgWs.Cells(idx, "A").Value
  Next idx
  orgWs.Activate
  Application.CutCopyMode = False
  Application.ScreenUpdating = True
End Sub

556 :デフォルトの名無しさん:2017/02/09(木) 12:48:49.77 ID:hH4J/ks8.net
×ご教授
○ご教示

557 :デフォルトの名無しさん:2017/02/09(木) 12:54:24.78 ID:f2wLu3Eu.net
ご教授願いたいも日本語として間違いとまでは言えないがあまり使われない表現だしご教示願いたいを間違ってるんだなと丸わかり

558 :デフォルトの名無しさん:2017/02/09(木) 12:54:36.06 ID:vKLMa/HO.net
ご教示お願いいたします...!

559 :デフォルトの名無しさん:2017/02/09(木) 13:03:15.06 ID:0S6dEfQx.net
>>555
本来のやりたい事がようわからんが ありがちな事として
Row(行) と Column(列)を 勘違いしてるとか

ActiveSheetの内容と欲しい結果を具体例で上げてみて

560 :デフォルトの名無しさん:2017/02/09(木) 13:25:47.81 ID:WkR93Ch5.net
>タイトル行ともう一行
なら2回コピペ

561 :デフォルトの名無しさん:2017/02/09(木) 13:43:10.76 ID:vKLMa/HO.net
一行一お客さんのリスト(一行目がタイトル行で二行目以降にお客さんの情報が載ったリスト)から、別シートにお客さん毎に情報を書き出したくて行数分だけシートを作りたい形です。出力先はタイトル列とお客さん列の2列だけにしたいのです

一件2回コピペで終わるんですが、数があるのと、元のリストを整備しておけば簡単に作り直せるようにしたいので。

562 :デフォルトの名無しさん:2017/02/09(木) 14:01:19.23 ID:0S6dEfQx.net
>>561
これだと どうかな? (2回コピペでもいいけどUnionで一回でいいようにしてる)

Sub Macro2b()
Dim orgWs As Worksheet
Dim idx As Long
  Set orgWs = ActiveSheet
  Application.ScreenUpdating = False
  For idx = 2 To Cells(Rows.Count, "A").End(xlUp).Row
    Worksheets.Add after:=Sheets(Worksheets.Count)
    Union(orgWs.Rows(1), orgWs.Rows(idx)).Copy
    Range("A1").PasteSpecial Paste:=xlPasteAll, Transpose:=True
    ActiveSheet.Name = orgWs.Cells(idx, "A").Value
  Next idx
  orgWs.Activate
  Application.CutCopyMode = False
  Application.ScreenUpdating = True
End Sub

563 :デフォルトの名無しさん:2017/02/09(木) 14:01:32.78 ID:e5heueGc.net
>>561
Sub Macro2()
Dim orgWs As Worksheet
Dim idx As Long
Set orgWs = ActiveSheet
Application.ScreenUpdating = False
For idx = 2 To Range("A65536").End(xlUp).Row
Worksheets.Add after:=Sheets(Worksheets.Count)
orgWs.Rows(1).Copy
Range("A1").PasteSpecial Paste:=xlPasteAll, Transpose:=True
orgWs.Rows(idx).Copy
Range("B1").PasteSpecial Paste:=xlPasteAll, Transpose:=True
'    ActiveSheet.Name = orgWs.Cells(idx, "A").Value
Next idx
orgWs.Activate
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub

こんなんでいいの?

564 :デフォルトの名無しさん:2017/02/10(金) 06:41:47.39 ID:C/dUqapt.net
>>561
書式必要じゃないなら
Dim v as variant
v = range(範囲)
貼り付け先 = v
ってした方が早いんじゃないかな
書式必要だとしても、形式が決まってるならあとから直接指定した方がコピペするより早いと思う
クリップボード経由する分コピペだと遅いはず

565 :デフォルトの名無しさん:2017/02/10(金) 07:18:27.18 ID:C/dUqapt.net
こんな感じね
細かいこと言うとActivesheetを変数に入れてるのに最大行求めるときに指定してなかったりとか個人的には気になる
あと、コピペするにしても行まるごとコピーするよりちゃんと範囲指定してあげたほうが速いんじゃね、試してないけど
後、増やした後のシートもちゃんと指定してあげないと
「アクティブになってる前提」でコード書くと怖いよ

Sub test()
Dim orgWs As Worksheet, dstWs As Worksheet
Dim idx As Long, maxRow As Long, maxCol As Long
Dim postValue As Variant
Set orgWs = ActiveSheet
maxRow = orgWs.Cells(Rows.Count, 1).End(xlUp).Row
maxCol = orgWs.Cells(1, Columns.Count).End(xlToLeft).Column
Application.ScreenUpdating = False
For idx = 1 To maxRow
postValue = orgWs.Range(orgWs.Cells(idx, 1), orgWs.Cells(idx, maxCol))
Set dstWs = Worksheets.Add(after:=Sheets(Worksheets.Count))
dstWs.Range(dstWs.Cells(1, 1), dstWs.Cells(maxCol, 1)) = WorksheetFunction.Transpose(postValue)
Next idx
orgWs.Activate
Application.ScreenUpdating = True
End Sub

566 :デフォルトの名無しさん:2017/02/10(金) 07:23:40.57 ID:C/dUqapt.net
あ、タイトル列やり忘れた
まあ、同じ要領で

567 :560:2017/02/10(金) 08:45:56.33 ID:ykEk/iF/.net
>>561
もちろん手作業じゃないよ
元のコードは1回(1行)しかしてないでしょ

568 :デフォルトの名無しさん:2017/02/10(金) 18:30:23.86 ID:n+qIsj3Q.net
皆様ご教示ありがとうございました!
VBAの勉強がんばります・・・

569 :デフォルトの名無しさん:2017/02/10(金) 18:45:27.09 ID:iQHACvfg.net
>>568
ちゃんと速度は計れよ

570 :デフォルトの名無しさん:2017/02/10(金) 20:51:56.75 ID:FEKvr519.net
2つエクセルブックがあって、仮にそれぞれを「BookA」「BookB」というブック名にする。
BookBに「仮シート」という名前のシートがあり、
そこにAのsheet1のA1〜B2のデータをコピーして、
仮シートのC1にコピーするにはどういうコードを書けば良いでしょうか?

Workbook("BookA").Activate
Worksheet("Sheet1").Activate
Range("A1:B2").copy(Workbooks("BookB").Range(C1))

これでは動かなかったです。
基本的なことですが、教えてくれると助かります。

571 :デフォルトの名無しさん:2017/02/10(金) 20:57:35.59 ID:FEKvr519.net
訂正

Workbook("BookA").Activate
Worksheet("Sheet1").Activate
Range("A1:B2").copy(Workbooks("BookB").Worksheets("仮シート").Range(C1))

これでは動かなかったです・・。

572 :デフォルトの名無しさん:2017/02/10(金) 20:57:57.50 ID:uU6WR+pH.net
>>570
Windows("BookA.xlsx").Activate
Sheets("Sheet1").Select
Range("A1:B2").Select
Selection.Copy
Windows("BookB.xlsx").Activate
Sheets("仮シート").Select
Range("C1").Select
ActiveSheet.Paste

573 :デフォルトの名無しさん:2017/02/10(金) 20:59:28.26 ID:FEKvr519.net
>>572
おぉ、こんな早いレスありがとうございます!
さっそく試してみます!

574 :デフォルトの名無しさん:2017/02/10(金) 21:08:21.59 ID:FEKvr519.net
>>572
一行目のxlsxって入れると、インデックスが有効でありませんって出ます。
このxlsxを抜くと動くんですけど、これは抜いてもいいんですか?

575 :デフォルトの名無しさん:2017/02/10(金) 21:30:28.00 ID:FEKvr519.net
追記:最初にブックをアクティブにする時にです。
xlsxがなければアクティブになるのですが・。

576 :デフォルトの名無しさん:2017/02/10(金) 21:59:49.57 ID:0WSFnPb1.net
マクロの記録使え

577 :デフォルトの名無しさん:2017/02/10(金) 22:33:27.68 ID:O1yyuw9v.net
>>575
ファイルが存在してない(bookAを保存してない)
xlsで保存してる
そもそも開いてない

どれか

578 :デフォルトの名無しさん:2017/02/10(金) 22:43:44.52 ID:Tmi1uInj.net
使ったら負けだと思ってる

579 :デフォルトの名無しさん:2017/02/10(金) 22:52:11.64 ID:O1yyuw9v.net
>>578
今はおとなしく負けてろ
次に勝てばいい

580 :デフォルトの名無しさん:2017/02/10(金) 22:55:49.26 ID:Tmi1uInj.net
>>579
ふ、いつでも次があると思うなよ

581 :デフォルトの名無しさん:2017/02/10(金) 22:59:43.13 ID:O1yyuw9v.net
>>580
いつまでも、な

俺は常に次を作り出せるので気にしない
いつまでも誰かから機会をもらえると思うなよ

582 :デフォルトの名無しさん:2017/02/10(金) 23:06:57.39 ID:Tmi1uInj.net
>>581
だから無いって言ってるだろ
ややこしい奴だなお前w

583 :デフォルトの名無しさん:2017/02/10(金) 23:12:17.61 ID:XPfR8Ri8.net
>>574
駄目です❗

584 :デフォルトの名無しさん:2017/02/10(金) 23:22:18.55 ID:eMOKhTfC.net
Excelが本気を出すと、
どの辺までいけますか?
バーチャファイター2は作れる?

585 :デフォルトの名無しさん:2017/02/10(金) 23:32:35.61 ID:X8zCTp9W.net
>>584
絵が描ける

586 :デフォルトの名無しさん:2017/02/10(金) 23:40:27.15 ID:eMOKhTfC.net
それはPowersPointでも出来ると思うんですよ。

587 :デフォルトの名無しさん:2017/02/10(金) 23:41:38.00 ID:XPfR8Ri8.net
>>584
4まで行ける

588 :デフォルトの名無しさん:2017/02/10(金) 23:45:26.17 ID:Y+gj7rLy.net
計算できる

589 :デフォルトの名無しさん:2017/02/10(金) 23:56:37.09 ID:6UihQBZT.net
ExcelでDirectX使えばそこそこのバーチャファイターぶりにはなりそう

590 :デフォルトの名無しさん:2017/02/11(土) 01:21:11.41 ID:DxY/TAwg.net
WindowsAPIを使ったBad Appleは動画?

591 :デフォルトの名無しさん:2017/02/11(土) 02:17:03.74 ID:WAY5pSrp.net
「29歳既婚、2年前に会社を辞めた。ボードゲーム作りを始めて3700万円を
売り上げたけど何か聞きたいことはある?」回答いろいろ
http://labaq.com/archives/51880196.html
自作ゲーム即売会「ゲームマーケット」に1万人超
http://www.nikkansports.com/general/nikkan/news/1750500.html
ボードゲームの展示イベント「ゲームマーケット」の成長記録からこれからの
市場に必要なことを妄想してみた。6年間の来場者数推移(2016年4月時点調べ)
https://bodoge.hoobby.net/columns/00001
カードゲームを自作する1 【自宅でカード印刷】
http://tanishi.org/?p=801
100円ショップでボードゲームを自作しよう
https://sites.google.com/site/jun1sboardgames/blog/makeyourbg
ノーアイデアでボードゲームを作ろう第1回「100円ショップで物を買う」
http://boardgamelove.com/archives/boardgame-make-1/
ボードゲーム市場がクラウドファンディングの出現で急成長を遂げ市場規模を拡大中
http://gigazine.net/news/20150820-board-game-crowdfunding/
実際のところ、自作ボードゲームってどれぐらい売れるもんなの?
http://roy.hatenablog.com/entry/2016/12/20/220102
ゲームマーケット2016春にて初参加サークルさんに作成数アンケートをとってきました
http://hidarigray.blog35.fc2.com/blog-entry-614.html
カフェも急増 ボードゲームにアラサーがハマる理由
http://style.nikkei.com/article/DGXMZO10921930R21C16A2000000?channel=DF260120166491
ボードゲームのオリジナルオーダー制作
http://www.logygames.com/logy/ordermade.html

592 :デフォルトの名無しさん:2017/02/11(土) 08:56:45.70 ID:81NKiA7R.net
>>584
週刊誌に載ってるような程度の詰将棋が解ける

593 :デフォルトの名無しさん:2017/02/11(土) 13:44:07.84 ID:WeBIHJYm.net
>570
>572
ActivateとSelectを使うのはやめた方がいいんじゃね?
copyで実装する必要もあるんかい?

Windows("BookA").Worksheets("Sheet1").Range("A1:B2").Copy Windows("BookB").Worksheets("仮シート").Range("C1")

とか

Windows("BookB").Worksheets("仮シート").Range("C1:D2").Value=
Windows("BookA").Worksheets("Sheet1").Range("A1:B2").Value

xlsxについて言えば、実際のブック名(ファイル名)はどうなってるの?
タイトルに書かれてる奴は?
ファイルに保存したことが無ければ当然拡張子は付いてない。

594 :デフォルトの名無しさん:2017/02/11(土) 17:37:07.32 ID:y7jIVWYW.net
BookBがBooBsに見えた

595 :デフォルトの名無しさん:2017/02/11(土) 17:51:11.27 ID:QMyG+xER.net
任意の結合されたセルをコピーして、別のセルに貼り付け後
コピー元のセルの結合を解除し、データを削除できますか?
(要はカットペースト)

任意のセルをコピーをして
Sub paste()
Selection.PasteSpecial paste:=xlPasteValues
Selection.PasteSpecial paste:=xlPasteFormats
End Sub
で、別のセルに貼り付けまではできるのですが
コピー元のセルの削除ができません。

596 :デフォルトの名無しさん:2017/02/11(土) 17:58:36.30 ID:2rQZT4wf.net
貼り付け先はどこ?

597 :595:2017/02/11(土) 18:06:37.00 ID:QMyG+xER.net
>>596

例えばA1からA3までが結合されていてそれをコピー
それをA5に貼り付けて
A1からA3は結合は解除されデータも削除したいのです。

598 :デフォルトの名無しさん:2017/02/11(土) 18:21:40.18 ID:2rQZT4wf.net
普通にマクロ記録でできません?
カットして、貼り付け先決めてペースト

599 :595:2017/02/11(土) 18:28:54.29 ID:QMyG+xER.net
>>598検討していただいてありがとうございます。

カットだと数式崩れてしまったり弊害も多くて…

600 :デフォルトの名無しさん:2017/02/11(土) 18:33:55.38 ID:DSeAMe3p.net
>>599
普通に
コピー元.MergeCells = False
コピー元.ClearContents
ではないの?

601 :595:2017/02/11(土) 19:36:29.77 ID:QMyG+xER.net
>>600
コピー元はA1:A3だったりA5:A8だったりと想定していまして
コピー元をRange("A1:A3")と指定できないです。

602 :デフォルトの名無しさん:2017/02/11(土) 19:38:42.10 ID:DVczqHH+.net
この言語って文系でも理解できますか?
変数宣言とメッセージボックスはなんとなくわかったのですが、IF文とかFor文とかわけわかりません

603 :デフォルトの名無しさん:2017/02/11(土) 19:44:43.18 ID:j9jl8H+0.net
数学があまり得意でないバリバリの文系出ですが職業プログラマです

604 :デフォルトの名無しさん:2017/02/11(土) 19:52:41.68 ID:P1k0UnFV.net
>>601
こうゆうのどう?
コピー元を選択してから

Sub XCopy()
Dim Source As Range
Dim Dest As Range
Set Source = Selection
On Error Resume Next
Set Dest = Application.InputBox(Type:=8, Prompt:="コピー先を選択してください。")
If Err.Number <> 0 Then Exit Sub
On Error GoTo 0

Source.Copy
Dest.PasteSpecial Paste:=xlPasteValues
Dest.PasteSpecial Paste:=xlPasteFormats
Source.MergeCells = False
Source.ClearContents
End Sub

605 :デフォルトの名無しさん:2017/02/11(土) 19:59:15.77 ID:3aCh2hRF.net
>>602
文系のおっさんだけどやってますよ
VBA始めたのも仕事ってことはあるけどExcel2000の頃からだしww

606 :デフォルトの名無しさん:2017/02/11(土) 20:10:03.75 ID:Yn1WOs8Z.net
>>602
じゃ無理です

607 :デフォルトの名無しさん:2017/02/11(土) 20:12:18.13 ID:eIU/UKQL.net
>>601
VBAでやる場合Range(Cells(fromRow,fromCol),Cells(toRow,toColl))みたいに書く方が好き

608 :595:2017/02/11(土) 20:30:29.51 ID:QMyG+xER.net
>>604
ありがとうございます。
コピー先にセルが結合していた場合のエラー回避を入れて
想定したものができました!!

609 :デフォルトの名無しさん:2017/02/11(土) 21:01:37.06 ID:vSETvneW.net
>>602
IF文がわからない??

610 :デフォルトの名無しさん:2017/02/11(土) 21:06:45.55 ID:eIU/UKQL.net
>>602
英語読めんだろ
VBAなんて中学生でも出来るよ

611 :デフォルトの名無しさん:2017/02/11(土) 21:12:11.94 ID:77uNpaEc.net
文法を5つぐらい丸暗記するだけだよ
単語の意味なんて別に知らなくても使える

612 :デフォルトの名無しさん:2017/02/11(土) 21:34:52.33 ID:DSeAMe3p.net
>>608
セルの結合の解除やデータ削除の仕方がわからないんじゃなくて
コピー元範囲を変数にセットしといて後で参照する方法がわかなかった、ということか。

最初の質問の仕方がちょっとまずいよ。

613 :デフォルトの名無しさん:2017/02/11(土) 22:19:45.12 ID:5OICUox8.net
>>612←もうこういうバカ本当に嫌だ

614 :デフォルトの名無しさん:2017/02/11(土) 22:47:58.77 ID:DSeAMe3p.net
>>613


615 :デフォルトの名無しさん:2017/02/11(土) 23:33:24.29 ID:5OICUox8.net
>>614
ああすまん言葉が足りなかったな
自分の無能を質問した側のせいにする馬鹿にはうんざりしてる
これで通じるかな?

616 :デフォルトの名無しさん:2017/02/11(土) 23:37:46.17 ID:DSeAMe3p.net
>>615

>>595 はなんだったのか ?

617 :デフォルトの名無しさん:2017/02/11(土) 23:50:57.08 ID:5OICUox8.net
>>616
知るかよ
俺が知ってる事と謂えば
俺が質問の意図を理解できないのは俺が無能だから
俺が答えられないのは俺が無能だから
悪いのは質問する側でなく俺自身の頭だということだけだ

618 :デフォルトの名無しさん:2017/02/11(土) 23:54:08.79 ID:uIilAFVC.net
>>615
同意

619 :デフォルトの名無しさん:2017/02/12(日) 00:18:43.15 ID:GCBuHwjB.net
改善要望だろ
カッカすんなよ

620 :デフォルトの名無しさん:2017/02/12(日) 01:27:22.72 ID:f71yA8WT.net
無能を見てイライラするのは自分が無能だからに他ならない
有能な者は無能を見たら視線を逸らせてゆっくりと後ずさってゆく
自分が無能だと理解できたものは幸せである 望む高みを目指す機会を得られたのだから
自分を無能だと指摘してくれる他人がいるものは幸いである その意見に反駁する機会を得られたのだから
アーメン

621 :デフォルトの名無しさん:2017/02/12(日) 07:21:34.46 ID:Fy2fTJRT.net
キモ

622 :デフォルトの名無しさん:2017/02/12(日) 07:26:15.58 ID:SthYlIVq.net
田村淳

623 :デフォルトの名無しさん:2017/02/12(日) 07:57:58.77 ID:lGLkKgIW.net
無能な質問者はその質問に対する直接的な回答をしないと激怒するんだよなぁ
そもそもこうやった方が良いよって間接的な解決法を回答すると
自尊心を傷つけられるのか回答になってない!って必ず激怒するね

624 :デフォルトの名無しさん:2017/02/12(日) 10:05:43.63 ID:SthYlIVq.net
本当に自分が知らなければならないことを把握するのも言葉にするのも難しい

625 :デフォルトの名無しさん:2017/02/12(日) 11:11:19.80 ID:LExlgtgk.net
疑問点をうまく説明できる人は、そのまま検索すれば答えが出てくるから
質問スレは利用しないという大前提が、みんなわかってませんね

言葉のキャッチボールをしながら疑問の核心を引き出すのが良い回答者ですよ

626 :デフォルトの名無しさん:2017/02/12(日) 11:16:08.28 ID:v4isfS8N.net
>>625
良い回答者は金もらえないのにメリットあるの?

627 :デフォルトの名無しさん:2017/02/12(日) 11:25:53.43 ID:tcfS8y3+.net
悪い回答者はお金もらってるの?

628 :デフォルトの名無しさん:2017/02/12(日) 11:29:40.27 ID:v4isfS8N.net
>>627
悪い回答者は自分の価値観で回答してるから回答する事が目的なんじゃね

良い回答者と言うのは質問者の価値観での良いという評価に過ぎない
自分の価値観と違う回答をするのは自分の目的とは違うんじゃね
金もらわないとバランス取れない

629 :デフォルトの名無しさん:2017/02/12(日) 11:31:37.18 ID:+/9Wo75i.net
>>625
もっと核心的な大前提忘れてるぜ

どのスレでもそうだけど 回答者のボランティアで自己満足だけよ メリットは
だから良い回答者になってもいいし ならなくてもいい

ようは 質問者の問題が解決しようがしまいが 自己満足できりゃいいのよ

630 :デフォルトの名無しさん:2017/02/12(日) 11:38:27.43 ID:oqB84mjV.net
悪い回答者しかいないところには質問者も来ないから結局誰も満足しないというジレンマ

631 :デフォルトの名無しさん:2017/02/12(日) 11:57:11.30 ID:uMNKLmCG.net
悪い質問者は結果みんなに迷惑をかける。
それが分かってるから回答者は直接的な回答をしない。

1.ピタゴラスイッチ的に動くかもしれんが絶対後で問題になるだろってのに頑張って回答しても、結局問題になって後々全然別の回答をしなければならなくなり、最初の回答が無駄になる。

2.直接的な回答を希望する奴はそれがどういう仕組みで動いてるかを自分のものにしないからしばらくするとまた同じ質問をしてくる。
結果、何度も同じ回答をしなければならなくなる。

回答ってのは質問者は自動で出てくると思ってるかもしれんが実際は回答者にも労力が必要なんだ。

632 :デフォルトの名無しさん:2017/02/12(日) 12:05:54.59 ID:SthYlIVq.net
ピタゴラスイッチ的に動く

633 :デフォルトの名無しさん:2017/02/12(日) 12:23:25.59 ID:6V2BuQIU.net
>>631
馬鹿過ぎる質問者は最初に追い払うのがいいんだよ

634 :デフォルトの名無しさん:2017/02/12(日) 12:40:25.32 ID:SthYlIVq.net
教えて!goo とか、どうにもこうにも解釈に苦しむ日本語の質問が散見されるし、
ここはまだマシだと感じるな

635 :デフォルトの名無しさん:2017/02/12(日) 12:50:07.91 ID:LExlgtgk.net
gooとかyahooは間違ったまま終わってるのがけっこうあるから、検索してて微妙な気持ちになる

636 :デフォルトの名無しさん:2017/02/12(日) 13:08:38.95 ID:FS+b1cKU.net
はてブやQiitaも微妙だからどこも大差ないのかなあ

637 :デフォルトの名無しさん:2017/02/12(日) 13:21:05.98 ID:nEtYr4+H.net
以前も書いたけど環境も問題も分かっている隣の同僚に聞く分には前提からなにからすっ飛ばして聞いてもある程度は
向うも判ってくれる。
けどこういう掲示板では相談者にとっては当たり前の事でも全然違う。まぁそれも訓練せんとなかなか判り易い質問ってのは
書けないw
自分も最近はあまり質問してないけど、以前は他のスレで叩かれまくったよwww

638 :デフォルトの名無しさん:2017/02/12(日) 13:49:23.28 ID:CC9/6sU1.net
>>625
だから俺は大抵嫌がらせのように考え方の指針だけ答えるようにしてるけど、大体教えたがりが答えだしちゃうよね

639 :デフォルトの名無しさん:2017/02/12(日) 13:50:29.70 ID:CC9/6sU1.net
>>630
別にこのスレが廃れるのはいいよ
このスレで答えられることなんて大抵オフィス田中にのってる

640 :デフォルトの名無しさん:2017/02/12(日) 14:03:28.41 ID:amMPaDhL.net
>>631
どんな質問されても迷惑したことなんてないけど
それお前だけと違うか?
質問が理解できなくて悩んであげく質問した人にキレて
結果皆に迷惑かけてんのお前の方じゃね?

641 :デフォルトの名無しさん:2017/02/12(日) 14:10:12.91 ID:FS+b1cKU.net
キレるのとそれじゃダメだと指摘するのはだいぶ違うから区別できる

642 :デフォルトの名無しさん:2017/02/12(日) 14:10:23.19 ID:uMNKLmCG.net
>>640
悪いがそれは無い。
それに俺もそういうアホな質問に回答しない方だから俺自身が被害に合うことも少ない。

でも掲示板のやり取りなんか見てるとトラブルになってるのはそういうのが多い。

643 :デフォルトの名無しさん:2017/02/12(日) 14:13:15.48 ID:amMPaDhL.net
>>642
そういうのってキレた教えたがりだよ

644 :デフォルトの名無しさん:2017/02/12(日) 14:27:08.47 ID:TQOoi023.net
>>637
>環境も問題も分かっている隣の同僚に聞く分には前提からなにからすっ飛ばして聞いてもある程度は
>向うも判ってくれる。
あなたは人間が出来てるね。俺は隣の同僚に聞かれるとムカッとくる。インデントもしてねえ汚ったねえ呪文みてえなコードを
見せられて「どこが悪いんだろ?」と言われても全部だろ全部、書き直してやるから三万払えコノヤローと叫びたくなる。

実際には、笑顔で書き直してやってるけどw

645 :デフォルトの名無しさん:2017/02/12(日) 15:44:19.46 ID:uMNKLmCG.net
>>644
それは無いわ。
だって直接やり取りできるなら何でも聞けるだろ。
問題はやり取りしまくって、結局元々の設計がダメで元に戻る時とかだから詳細をいくらでも聴ける時は頭には来ない。

ダメコードなのは最初から織り込み済みだし。
相手のレベルも分かってるでしょ。

646 :デフォルトの名無しさん:2017/02/12(日) 15:48:38.40 ID:LExlgtgk.net
会社の事情でデータが出せないとかコードが出せないとかで再現できないのが一番困る
それなら隣に座ってる同僚に聞いたほう が早いだろうに

647 :デフォルトの名無しさん:2017/02/12(日) 16:12:35.44 ID:amMPaDhL.net
>>646
いや別にお前が困る必要はないよw
分からなければ黙ってスルーしておけばいいだけ

648 :デフォルトの名無しさん:2017/02/12(日) 17:17:33.80 ID:FS+b1cKU.net
ここはVBAスレだぜ?
会社で隣のやつとプログラムの話って想像しにくいんだけど、どういう状況だ?
同じプログラムを共有でもしてるのか?

649 :デフォルトの名無しさん:2017/02/12(日) 17:23:48.50 ID:uMNKLmCG.net
状況だけ説明されて、詳細を聞こうとしたら出せないと。
で、それじゃあ回答のしようも無いわなって終わるような場合にこちらのスキル不足認定されると頭に来るかもね。

状況だけで回答できる場合もあればそうじゃない場合もあるわけで、回答しようもない場合もあるわけだからさ、その場合は回答者の問題じゃないのに理解出来ない質問者ってのがまれにいる。

650 :デフォルトの名無しさん:2017/02/12(日) 17:27:40.76 ID:uMNKLmCG.net
>>648
それぞれ全然別作業してても、結局分かる奴に質問が集中するもんでしょ。

分からない時は彼に聞けばみたいなの。
人づてに全然知らない人から教えて欲しいってこともあるし。

651 :デフォルトの名無しさん:2017/02/12(日) 17:28:45.00 ID:VkacFT0c.net
ここで質問するようなやつって基本的に怠け者の屑なんだよね
ステップ踏まずに答えだけ聞いて手抜きしようとするバカが多い
なぜそうなるか、を理解しないからなんも成長しなくて同じことを繰り返す
そういうバカだから質問も的を射ないで抽象的
そりゃ、君の脳みそじゃわからんよねとは思うよ

652 :デフォルトの名無しさん:2017/02/12(日) 17:40:24.11 ID:UUbs1MWi.net
プログラミングを免許制にするべきなんだろうな
バカが多すぎて辟易する

653 :デフォルトの名無しさん:2017/02/12(日) 18:04:26.68 ID:v4isfS8N.net
>>652
国家試験あるじゃない
免許じゃないけど企業側がその結果を利用すればいい

654 :デフォルトの名無しさん:2017/02/12(日) 18:27:17.36 ID:yxF5W3i1.net
>>644
> 実際には、笑顔で書き直してやってるけどw
俺も人間できてるだろ、どや
って言いたいのかよ w

655 :デフォルトの名無しさん:2017/02/12(日) 18:32:30.34 ID:yxF5W3i1.net
>>652
一時社内でマジで検討したことがある
結局適当な資格を決められずに頓挫したけど

656 :デフォルトの名無しさん:2017/02/12(日) 18:40:30.05 ID:TQOoi023.net
>>654
>俺も人間できてるだろ、どや
>って言いたいのかよ w
そうw

657 :デフォルトの名無しさん:2017/02/12(日) 18:48:13.67 ID:GCBuHwjB.net
>>655
不合格者はどうする案だったの?

658 :デフォルトの名無しさん:2017/02/12(日) 18:58:47.93 ID:uMNKLmCG.net
自分の経験上では資格持ってる奴の方がレベルが低いことが多いから同意出来ないな。
どうも、勝負出来るスキルが無いから資格でなんとかしようって奴が多い。

面接での決定権握ってる奴ができる技術者ならすぐにレベルなんて分かる筈なんだけどなあ。
実際はそうじゃ無いことが多いよなあ。

659 :デフォルトの名無しさん:2017/02/12(日) 19:15:20.52 ID:GCBuHwjB.net
FizzBuzz書けないって都市伝説なのか事実なのか

660 :デフォルトの名無しさん:2017/02/12(日) 19:20:38.47 ID:amMPaDhL.net
お前程度に出来る事が他人に出来ない訳ないだろw

661 :デフォルトの名無しさん:2017/02/12(日) 19:34:39.49 ID:uMNKLmCG.net
人がどんなコード書いてるのか知らないのにお前程度とか言っちゃうのはどうなんだ?

俺は俺よりできる奴がたくさんいるからそんなこと言えないな。

662 :デフォルトの名無しさん:2017/02/12(日) 20:22:16.08 ID:yxF5W3i1.net
>>657
テスト要員とかドキュメント管理とか

663 :デフォルトの名無しさん:2017/02/12(日) 20:39:44.09 ID:MzCVzIkj.net
>>659
ここで質問してるやつらの半分くらいはそんな感じじゃね
まともに勉強してるとは思えない質問が多いし

664 :デフォルトの名無しさん:2017/02/12(日) 20:42:14.91 ID:zIkO4GAA.net
VBAスタンダードの勉強をしているのですが、
GetとEOFってどう違うんですか?
なんか両方「全部」ってのが共通みたいですが?

665 :デフォルトの名無しさん:2017/02/12(日) 20:53:22.25 ID:MzCVzIkj.net
>>664
釣りにしてもひどない?

666 :デフォルトの名無しさん:2017/02/12(日) 22:37:48.01 ID:UPBLh8xx.net
>>658
英語もそうだけど実践的に使用する技術は「知識として知っていればいい」というもんじゃないからな。
まぁSEとかPG名乗りながら論理回路って何ですかみたいなのは切っていいと思うけど。

667 :デフォルトの名無しさん:2017/02/12(日) 22:48:43.09 ID:SolFmjsL.net
>>666
そうですよね。
ところで論理回路って何ですか?

668 :デフォルトの名無しさん:2017/02/12(日) 22:57:44.43 ID:yxF5W3i1.net
>>665
そう思ったならなぜスルーしないんだよ...

669 :デフォルトの名無しさん:2017/02/12(日) 23:38:53.25 ID:l0D/TqVE.net
大丈夫。
俺PG歴長いけど、「引数」の読み方知らないぞ。

670 :デフォルトの名無しさん:2017/02/12(日) 23:50:47.91 ID:hrcImG9t.net
あれって、もともと「ひきすう」って読むの?
それとも因数とややこしいから、敢えて違う読み方してるのかな?
抜糸(抜歯とややこしいからバツイト)、首長(クビチョウ)みたいに。

671 :デフォルトの名無しさん:2017/02/12(日) 23:54:27.68 ID:SolFmjsL.net
オブジェクト指向の「指向」ってどう読むの?
さしむき?

あとVisualStudioの「Studio」は?
わたしは英語圏の生活長いからいつもステューディオウだけど合ってるかな?

672 :デフォルトの名無しさん:2017/02/12(日) 23:58:50.90 ID:7cAel6qO.net
>>671
しむけ

673 :デフォルトの名無しさん:2017/02/12(日) 23:59:46.79 ID:XHYJ/nHJ.net
どうでもよすぎ…ググレカスで終わる

674 :デフォルトの名無しさん:2017/02/13(月) 00:50:43.41 ID:TuS8jPy4.net
わたしは英語圏の生活長いからVBA関連の語のアクセントが英語風なのよね。
これ無意識だから絶対に日本人のようなあの不気味な平坦なアクセントができない。
日本人のあの平坦な発音の仕方って気持ち悪いから意識しても真似ようという気が起こりすらしないけど。

[例]
プ[ロ]パティ
[メ]ソッド
[シ]グネチャ
プロ[シ]ージャ
などで、[□]で印したところにアクセントおいてるけど日本人は不気味で全部平坦で発音してて単語の最後が微妙に伸ばしてるるよね。

675 :デフォルトの名無しさん:2017/02/13(月) 00:59:14.48 ID:S035yfE+.net
>>674
これって学習能力や適応力のなさを自慢する大会ですよね
そういう自虐的な思考は完全に日本人の物だから安心していいですよ

676 :デフォルトの名無しさん:2017/02/13(月) 01:20:23.88 ID:TuS8jPy4.net
いやわたしの国際性、意識高い系の人であること、偉大さを証明するものだ

677 :デフォルトの名無しさん:2017/02/13(月) 01:26:42.46 ID:C+gt+Ln2.net
お薬出しておきますねー
次の質問どうぞー

678 :デフォルトの名無しさん:2017/02/13(月) 01:27:44.32 ID:0xlsTvjn.net
>>676
承認します

679 :デフォルトの名無しさん:2017/02/13(月) 02:35:42.13 ID:d9vpZ2GC.net
昔の仕事で1と0のみでできてるバカでかいテキストファイル読み込んで論理演算(ANDやOR)してるのを見たことあるけど両者から1文字ずつ取ってきて1と1だったら1、0と1だったら0、1と0だったら0、0と0だったら0とIf文とかSelect Caseでやってるの見た時はびっくりしたな。

ASCIIコード見れば分かると思うが、文字の1と0はそのままANDもORも出来るから。

"0"->110000
"1"->110001

一番最後の桁以外はANDもORも変わらん。

知識よりも目的に向かっての創意工夫の方が大きいんじゃない?

680 :デフォルトの名無しさん:2017/02/13(月) 08:05:56.56 ID:+cwVmN7p.net
>>668
触ったら面白いかな?って思って

681 :デフォルトの名無しさん:2017/02/13(月) 08:20:45.44 ID:3tq7pNhG.net
>>674
俺は仕事の場合は相手によって使い分けるようにしてるよ
相手に伝わってナンボ

682 :デフォルトの名無しさん:2017/02/13(月) 09:05:12.35 ID:VG69ZfS4.net
>>674
真似すればいいじゃん?

683 :デフォルトの名無しさん:2017/02/13(月) 12:47:15.39 ID:Ah1ijx/J.net
>>679
まずその1や0を文字列として扱うのが正当なのか疑問なんだが

684 :デフォルトの名無しさん:2017/02/13(月) 12:48:50.42 ID:+cwVmN7p.net
>>679
まずこの文で要件を汲み取ることが難しいわ

685 :デフォルトの名無しさん:2017/02/13(月) 13:04:24.32 ID:FQScQiCC.net
サヨクからしてみれば
今回は効きすぎだろ ww

686 :デフォルトの名無しさん:2017/02/13(月) 13:07:44.96 ID:FQScQiCC.net
>>685
ごめんなさい
投下場所間違えました

687 :デフォルトの名無しさん:2017/02/13(月) 13:26:07.32 ID:d9vpZ2GC.net
>>683
その通りだが、既に与えられてるデータがそうなってて他社とやり取りされてたから仕方ない。
まあ、そこの会社もそれは分かってたみたいでその後普通のバイナリに移行してたな。

688 :デフォルトの名無しさん:2017/02/13(月) 20:00:37.76 ID:d/USi4s0.net
>>684
"0" ⇒ &H30, "1" ⇒ &H31 だから Asc( ) でコードにしてそのまま And/Or できるって言いたいんだろ
もとのコードがどんなもんか知らんけど俺は文字のまま処理するって言うのも別におかしくないと思う

689 :デフォルトの名無しさん:2017/02/13(月) 20:18:34.49 ID:1gaAmlEB.net
たぶんVBAの内部処理は
Val("0") Or Val("1")
みたいな状態になってるからすごく効率悪い

690 :デフォルトの名無しさん:2017/02/13(月) 21:49:13.40 ID:s/tywzZZ.net
どこから Val( ) が出てくるんだろう...

691 :デフォルトの名無しさん:2017/02/13(月) 22:24:31.70 ID:01I2Ha4W.net
たいていのことはRelaxTools Addinのソースを見れば書いてある

692 :デフォルトの名無しさん:2017/02/14(火) 00:40:54.47 ID:ClQJHzh+.net
>>688
スピードで100倍以上違うよ。

693 :デフォルトの名無しさん:2017/02/14(火) 01:22:00.98 ID:DOjYefWL.net
100倍程度じゃ可読性犠牲にできんわ

694 :デフォルトの名無しさん:2017/02/14(火) 09:29:24.02 ID:1O/6AsKp.net
和暦問題どーしてます?

レジストとか外に制御テーブル持っててくれれば良いけど、エクセルは内部で抱えてるみたいだし。

日本だけの独自文化だし、ある意味買い替えの特需だからマイクロソフトも対応するとも思えない。

マイクロソフトを信じて待つのが正しい?

695 :デフォルトの名無しさん:2017/02/14(火) 09:36:36.27 ID:ES7A40w+.net
可読性?
この程度で可読性無くなってると思うんじゃ話にならない。
100倍程度とか簡単に言うのもどうなんだろね。

この論理演算を1回とか2回とか実施して終わるとか思ってるんだろうな。
実際のこの関数を呼び出す大元のマクロでそれまで6時間とかかかってたんだがね。
0、1のテキストファイルのサイズにもよるんだろうけど300Mbyteのファイルの時はそんなだったな。

696 :デフォルトの名無しさん:2017/02/14(火) 09:47:37.20 ID:he6YB8dM.net
>>694
待つのが正しい
ただし対応しました!といってから2ヶ月くらい待つのが正しい

697 :デフォルトの名無しさん:2017/02/14(火) 09:59:06.01 ID:1O/6AsKp.net
>>696
デイリーで処理してるから
速攻でバレるんよ。
もしマイクロソフトが対応してくれないと。

698 :デフォルトの名無しさん:2017/02/14(火) 10:18:16.37 ID:XQOX6frc.net
>>694
和暦なんて最終的な表示部分だけでしょ?
アドホックな対応でごまかしながら待つしかないんじゃないかなあ。

699 :デフォルトの名無しさん:2017/02/14(火) 10:20:17.77 ID:1O/6AsKp.net
やはりそれかな?
処理が終わったところでイベント発生禁止にして上書き、んでイベント復活しかない?

700 :デフォルトの名無しさん:2017/02/14(火) 21:19:12.87 ID:zSFmfMPu.net
平成のときは人海戦術でフィールディング以外の部門まで狩り出して一週間ぐらいでやっつけたな
昭和のときは三ヶ月掛かったけど

消費税もそうだけど、日付と名称(消費税なら率)が判明したらそこだけだもの、今回は瞬殺だろ

701 :デフォルトの名無しさん:2017/02/14(火) 23:14:00.51 ID:erEJytj9.net
今回というか次の元号については
平成31年1月1日に生前退位が行われ新元号になるってのが決まってるんだから
その時まで不測の事態が起こらない限り事前の準備時間はある…?のかな

702 :デフォルトの名無しさん:2017/02/14(火) 23:24:09.61 ID:ev1pSY1G.net
>>672
俺ならオブジェクト指原ってボケる。

>>701
既に次の年号が組み込まれていたら笑う。

703 :デフォルトの名無しさん:2017/02/14(火) 23:27:43.38 ID:UB3JXf9t.net
不測の事態が起こりうるならいつか必ず起きるので生前退位は無いよ

704 :デフォルトの名無しさん:2017/02/14(火) 23:52:21.37 ID:fgjpd/Zj.net
使用を取りやめる、という選択

705 :デフォルトの名無しさん:2017/02/15(水) 00:12:27.99 ID:urFAvqLF.net
不測の事態なら、時間がなかったんですぅ〜という言い訳ができるけど
そうでない場合は漏れが許されないんだぞ

706 :デフォルトの名無しさん:2017/02/15(水) 03:50:35.87 ID:vC8DQIA4.net
>>701
1月1日では他の宮中行事とカブってワチャワチャするからズラすとか言ってなかった?
まぁ事前にわかる事に変わりはないか。

707 :デフォルトの名無しさん:2017/02/15(水) 08:20:59.18 ID:uIQboeV9.net
>>694
まじか…OSが持ってると思ってたよ…
会社のOfficeはそろそろ新しいのに買い換えないとな

708 :デフォルトの名無しさん:2017/02/15(水) 12:27:48.68 ID:wBM76KMm.net
うちの会社最近MSからライセンス買えって言われてoffice365を何台か入れたんだけど他にも2013、2010、2007、2003があるんだよなぁ…
VBAとかで作ってる社内資料は殆ど和暦表示だから、今から考えると恐ろしいわ…

709 :デフォルトの名無しさん:2017/02/15(水) 13:37:00.48 ID:HgaCZlv6.net
むしろ西暦に統一するチャンスと

710 :デフォルトの名無しさん:2017/02/15(水) 13:47:11.11 ID:6F4521pz.net
MSはよく言われるようにOSじゃなくてOfficeで金儲けしてるから

711 :デフォルトの名無しさん:2017/02/15(水) 14:58:51.71 ID:5igOyxsI.net
シートのA列に日付、B列に時刻、C列はアイテム名称、D〜L列は属性データで、1行目は項目名を入れた表を作りました

日付、時刻は上から下へと、時系列に並んでいます
日付・時刻・アイテム名の同時重複ありです

やりたいこと=「表示したい”行数を入力”して、その行数をシートの左上にして表示する」

Sub Lookup_Row()

' 使用済みの最終セルの選択
 Dim MaxRow As Integer
 With Range("A1").SpecialCells(xlLastCell)
  MaxRow = .Row  '最終セルの行
 End With

' 表示したい行数を入力
 Dim NumRow As Integer
 NumRow = InputBox("表示したい行数を入力", Title:="行数入力", Default:=buf)
  If NumRow > 0 And NumRow <= MaxRow Then
   ActiveWindow.ScrollRow = NumRow
  Else
   MsgBox "行数が許容範囲を超えています =" & NumRow
  End If

End Sub

入力ミスがあった場合
入力で-100 → If文でチェック → MsgBox "行数が許容範囲を超えています =" & NumRow
入力で1000000 → 実行時エラー オーバーフローしました。
入力でAAA → 実行時エラー オーバーフローしました。
となります、入力が整数型で1〜MaxRowなら実行、それ以外はMsgBoxでエラー表示させたいのですが

712 :デフォルトの名無しさん:2017/02/15(水) 15:37:06.29 ID:xVeThrOd.net
>>
On Error使うか
Dim NumRow As Variant にして後で数値か? 許容範囲か? チェックしる

713 :デフォルトの名無しさん:2017/02/15(水) 15:41:53.42 ID:6lReDbAz.net
>>711
そうなんですか。
ご苦労が多そうですが
養生なさってください。

714 :デフォルトの名無しさん:2017/02/15(水) 17:50:36.24 ID:uggMbaXG.net
変数の型とかわかってない奴はVBAなんか使うなよ

715 :デフォルトの名無しさん:2017/02/15(水) 18:10:31.64 ID:khJPh7n1.net
inputboxじゃなくてフォームでっち上げた方が入力チェックは楽じゃねえか

716 :デフォルトの名無しさん:2017/02/15(水) 18:19:40.04 ID:LgUU6dFz.net
>>714
面倒なので迷ったらVariantですごめんなさい

717 :デフォルトの名無しさん:2017/02/15(水) 18:58:10.50 ID:MestFhjv.net
使い方を限定するのはプロジェクト単位でいいと思う
この場ではどんな使い方だとしても目的を果たせればいい
メンテナンス性を考えるならできあがってから考えても遅くないし

718 :デフォルトの名無しさん:2017/02/15(水) 19:35:12.52 ID:8P5JIAcq.net
>>714
Variant 以外はあまり使いませんな。カウンタに Long を使うくらいか。

719 :デフォルトの名無しさん:2017/02/15(水) 19:49:51.07 ID:yaVm0IDe.net
variantはクソなんかじゃない
variantを使えない奴がクソ呼ばわりしてるだけだ

720 :デフォルトの名無しさん:2017/02/15(水) 20:00:12.56 ID:F/aHSwB0.net
型が決まる時はvariantにしちゃダメだろ。
基本使うべきじゃない。

Rangeを配列で受ける時とか、特別な理由があるなら分かるけど。

721 :デフォルトの名無しさん:2017/02/15(水) 20:15:18.98 ID:8QtzDjS+.net
シート2枚のブック(シート1にデータ、シート2にグラフが20個ほど)がありまして、
揮発性関数を一切使ってないのに(マクロも外部データの参照も使っていません)
ブックを開いてすぐ閉じても変更を保存するか確認するダイアログボックスが出てきて困っています。
なんでこんな事になったのか心当たりが有りません。
揮発性関数以外にブックの保存を促す要素って何か有るのでしょうか?

722 :デフォルトの名無しさん:2017/02/15(水) 20:34:50.87 ID:khJPh7n1.net
VariantはRangeを配列に突っ込むか関数の引数の型が確定しないときにしか使わんわ
型が確定してないのとかチンポジずれてるみたいで気持ち悪い

723 :デフォルトの名無しさん:2017/02/15(水) 20:46:48.47 ID:wfPvVi6q.net
変数宣言時の型推論、Return文、ラムダ式、ジェネリックが足りない
マイクロソフトは早く拡張しろ

724 :デフォルトの名無しさん:2017/02/15(水) 20:52:37.92 ID:UwBeD5Zq.net
Excel C#Aはよ

725 :デフォルトの名無しさん:2017/02/15(水) 20:52:53.63 ID:je/ZAYb+.net
>>720,722
ほとんどの場合引数の型が確定しないので結局Variantだらけになる

726 :デフォルトの名無しさん:2017/02/15(水) 21:05:02.59 ID:khJPh7n1.net
>>725
でもあとからキャストするでしょ

727 :デフォルトの名無しさん:2017/02/15(水) 21:09:13.63 ID:F/aHSwB0.net
>>725
はあ?
確定しないことなんて殆ど無いわ。
設計が悪いんだろう。

728 :デフォルトの名無しさん:2017/02/15(水) 21:20:08.65 ID:yaVm0IDe.net
ド素人の事務のねえちゃんでも全部variantで書けるのに
お前らどんだけプログラミングが下手なんだよ

729 :デフォルトの名無しさん:2017/02/15(水) 21:21:34.66 ID:OJCj5dj4.net
>>725
馬鹿

730 :デフォルトの名無しさん:2017/02/15(水) 21:22:18.43 ID:khJPh7n1.net
型が確定しない関数は入ってくる値をゴニョゴニョして任意の値に変換したいときとかに、日付だったり数値だったり文字列だったりで分岐させてリターンを変化させるときとかかな
他になんか必要な場面あるかね

731 :デフォルトの名無しさん:2017/02/15(水) 21:23:23.84 ID:MestFhjv.net
ど素人だからこそvariantを多用するんだよ

732 :デフォルトの名無しさん:2017/02/15(水) 21:23:56.89 ID:khJPh7n1.net
>>728
variantで書けるから偉いのか?
全部variantで書いて処理速度が問題ない程度のプログラムしか書かないならそれでも良いんじゃない

733 :デフォルトの名無しさん:2017/02/15(水) 21:25:00.63 ID:yaVm0IDe.net
>>732
は?なんでそうなるんだよ

variantで書けないから下手なんだよ

734 :デフォルトの名無しさん:2017/02/15(水) 21:27:54.70 ID:UwBeD5Zq.net
>>733
そんなにvariantが好きならjsをオススメする

735 :デフォルトの名無しさん:2017/02/15(水) 21:28:00.36 ID:xVeThrOd.net
Dim a(10) As Long
Dim b As Variant
For Each b In a

Next
とか

736 :デフォルトの名無しさん:2017/02/15(水) 21:31:10.86 ID:F/aHSwB0.net
いろんな言語のコーディングの本でも読んだら。
VB系のプログラマーが他から糞呼ばわりされるのが良く分かる。

俺に言わせればVBが糞なんじゃなく、そのプログラマーが糞なんだが、確かにVBAには糞コード書く奴が多いよな。

737 :デフォルトの名無しさん:2017/02/15(水) 21:33:07.33 ID:khJPh7n1.net
>>733
いやね、variantで書けと言われれば書けるよ
書く必要がないし気持ち悪いし大抵遅くなるからやらないだけで
>>735
その書き方あんま見たことないけど普通のforに比べて速かったりするの?

738 :デフォルトの名無しさん:2017/02/15(水) 21:35:18.88 ID:vaCBxgQg.net
>>721
コードはって

739 :デフォルトの名無しさん:2017/02/15(水) 21:38:36.03 ID:A9woeCde.net
>>738
>マクロも外部データの参照も使っていません
って言ってるのに
>コードはって
とか言ってもな

740 :デフォルトの名無しさん:2017/02/15(水) 21:38:42.30 ID:yaVm0IDe.net
>>737
variantの遅さなんてアルゴリズムの遅さに比べれば誤差にも届かんのだよ
つまり遅いのはvariantのせいではない

741 :デフォルトの名無しさん:2017/02/15(水) 21:46:30.70 ID:F/aHSwB0.net
>>740
そういう問題じゃ無い。
そして、実際に遅い時点で糞コード。
メリットが無い安易な逃げだな。
技術力の無さを埋めるための。

まったく、動けば良いと思ってる奴が多すぎる。

742 :デフォルトの名無しさん:2017/02/15(水) 21:49:04.70 ID:khJPh7n1.net
>>740
この人のプログラムは変数名もきっと適当であとから見たら何が何だかわからないだろうね

743 :デフォルトの名無しさん:2017/02/15(水) 21:49:26.25 ID:yaVm0IDe.net
>>741
つまりお前がクソコード書いてるって事じゃないかw
何言ってんのお前w

744 :デフォルトの名無しさん:2017/02/15(水) 21:50:42.27 ID:UwBeD5Zq.net
>>743
日本語でおk

745 :デフォルトの名無しさん:2017/02/15(水) 22:05:34.61 ID:je/ZAYb+.net
>>727
確定しないことがほとんどさ

746 :デフォルトの名無しさん:2017/02/15(水) 22:13:59.52 ID:YhLDJr+c.net
確定しないと言うか型の制御をexcelに委ねちゃって
コードに表れないことばっかになると読む方が辛い

747 :デフォルトの名無しさん:2017/02/15(水) 22:14:54.77 ID:yaVm0IDe.net
最後にマジレス
variantを使って分かりにくくなるのは型をコントロール出来ていないコードだから
重要なのは変数の型ではなく値の型
値の型が一貫してコントロール下にあるコードは全てvariantでも読みやすくバグも出にくい
本当に気を使うべきは値の型

748 :デフォルトの名無しさん:2017/02/15(水) 22:15:25.45 ID:je/ZAYb+.net
まあ定量的にいうと、手元にある大きめのbasファイルで As xxx を数えてみたら

As Variant 282個
As その他 102個

だった。
「ほとんど」というのは言い過ぎだったかも。

749 :デフォルトの名無しさん:2017/02/15(水) 22:19:05.17 ID:je/ZAYb+.net
別のbasファイルでは
 As Variant 238個
 As その他 17個
だった。こっちは「ほとんど」と言える。

750 :デフォルトの名無しさん:2017/02/15(水) 22:28:33.65 ID:wfPvVi6q.net
>>747
タイプセーフにすれば動作する前に型をコントロールできていることがはっきりする

751 :デフォルトの名無しさん:2017/02/15(水) 22:31:45.05 ID:m87qnWVq.net
Excel VBAのみでgzファイルを解凍したいのですが可能でしょうか?
別途DLL、EXE、その他一切のファイルの使用は出来ません
Webサーバを立ててそっちにPOSTして解凍したファイルを送り返してもらう、
という案もだめでした(ネットワークに繋がっていなくても動ける必要アリ)

ZIPならApplication.Shellを使うという定番技があるんですが、gzファイルでも
同じように解凍出来ませんでしょうか?
.NETの System.IO.compressionが使えたりしないか試してみましたらCOMでは
ないようで駄目でした

752 :デフォルトの名無しさん:2017/02/15(水) 22:37:18.33 ID:khJPh7n1.net
>>747
いや、最後にすんなやw
型をvariantにする必要性が全く見えてこない
少なくともVBAはコード側で型付けする言語だと思ってるんですが
.NETだったら全部Objectで処理するのか…?

753 :デフォルトの名無しさん:2017/02/15(水) 22:38:45.19 ID:F/aHSwB0.net
>>747
だからそういう問題じゃない。
絶対にLong以外有り得ないのにVariantにするのはクソだ。
そして決まらないのは設計がクソだからだ。
というより設計して無いんじゃないか?
取りあえず動くようにしてるだけで。

「Variantでも」と言ってる時点で糞。
同等ではメリットになっていない。
そして実際にはデメリットに気付いて無いだけ。

754 :デフォルトの名無しさん:2017/02/15(水) 22:46:22.73 ID:je/ZAYb+.net
>>747
値の型って何?
Variant変数に格納された値自体の型ってことなら、コントロールは難しいと思うよ。

755 :デフォルトの名無しさん:2017/02/15(水) 22:46:54.44 ID:J6VHa6KY.net
これは数量だからロングにしよう、とか思ってもですねぇ、
ウチの会社のエクセルは、神エクセルですから、
セルに「1/3個」とか平気で書いちゃうんですね。
だから、バリアントじゃないとエローになっちゃうんですね。

756 :デフォルトの名無しさん:2017/02/15(水) 22:50:51.92 ID:khJPh7n1.net
>>755
バカかな?

757 :デフォルトの名無しさん:2017/02/15(水) 22:51:02.74 ID:BBx5ZcB8.net
Variant型を積極的に使用するかどうかなんて状況によるだろ。
とりあえず動けばいいマクロを書く場面だって社内SEならよくあるだろうし、
逆に型指定しておく事でバグが発生しにくくなるとかマクロが使いやすくなるっていうなら積極的に型指定すべきだし。

いついかなる場合においてもVariant型は極力避けるべきであるって論調なら、ただ頭が固すぎる。

758 :デフォルトの名無しさん:2017/02/15(水) 22:52:39.74 ID:tPmatHBd.net
セルの書式で
0"個"
にしてあるのに「3個」って入力されて集計から漏れるのは防ぎようがない
VBA使っていいんなら勝手に「個」を消して、全角の数字も半角にして、オーをゼロに置換してやるんだけど

759 :デフォルトの名無しさん:2017/02/15(水) 22:53:31.89 ID:yaVm0IDe.net
>>752,753
じゃあもう一回w

お前らプログラミングがヘタクソだから
variantでキレイなコードを書けるように練習しなよ

俺が言ってるのそういう事w
お前らの興味が向いている様な初心者のおまじないみたいな話は
ハナから問題にしてないw

760 :デフォルトの名無しさん:2017/02/15(水) 23:06:54.66 ID:khJPh7n1.net
>>759
極論言えばだな
お前はループ用の変数までvariantで書くのか?
という話なんだよ

761 :デフォルトの名無しさん:2017/02/15(水) 23:09:58.33 ID:F/aHSwB0.net
>>759
完全にアホ過ぎる。
Variantで書いても既にキレイなの。
分かる?
でもそれはきちんと型指定してもキレイなの。

762 :デフォルトの名無しさん:2017/02/15(水) 23:13:41.64 ID:BBx5ZcB8.net
>>760
ループ用の変数はループに入る時点でロックされて型が決定するから、
Variant型でやろうがLong型でやろうが大して差は開かなかったはず。

ただ変数型の違いよる処理時間はVariant = Long > Integer > Byteの順になってたはずだから、
ループ回数の上限が分かっているならIntegerやByteを使うのは有効。

763 :デフォルトの名無しさん:2017/02/15(水) 23:15:19.21 ID:F/aHSwB0.net
設計思想が無いんだろうな。
キレイに書くのは当たり前。

>>757
取りあえずってのはそいつのコーディングスタイルというか、癖みたいなもんもあるからあり得るだろうな。
俺だってコメント全く無しで書くこともある。
その時だけのマクロとか。

でもそれをOKとは言わないだろ。

764 :デフォルトの名無しさん:2017/02/15(水) 23:15:24.29 ID:khJPh7n1.net
型の指定が初心者のおまじないとか何を言ってるのかわからないよ
まあその程度のプログラムしか書いてないんだよ
worksheetとかrangeとかを全部objectで指定してるのと一緒だぞ

765 :デフォルトの名無しさん:2017/02/15(水) 23:16:47.40 ID:aYEzhSy+.net
基本的に変数はdoubleなりなんなりで宣言する派だが
ループ用の変数なんてどうでもいいから宣言もしてないな
結果variantになってるなw

766 :デフォルトの名無しさん:2017/02/15(水) 23:17:28.43 ID:je/ZAYb+.net
>>755
それはエラーになるのが正解
というか自ら進んでエラーを出して止まるべき

俺のプログラムがほとんど As Variant だと言ったけど、それはVariantであるべきプログラムだから。

767 :デフォルトの名無しさん:2017/02/15(水) 23:18:17.50 ID:pcB8Xi3u.net
型わかってるのにVariant型じゃないと入れられないのとかあるじゃん

768 :デフォルトの名無しさん:2017/02/15(水) 23:19:42.16 ID:khJPh7n1.net
>>762
でもループ変数をvariantで書くやつなんかほとんどいない
なぜなら意味がないから
longで書くことには意味があるから
variantにすることに意味があるならする
処理速度的に意味がなくても明示的にこの変数はこの型ですよ、ってしてあげることで可読性は上がる

769 :デフォルトの名無しさん:2017/02/15(水) 23:20:13.95 ID:je/ZAYb+.net
>>762
普通に考えると
Long <= Integer = Byte < Variant の順だと思う

770 :デフォルトの名無しさん:2017/02/15(水) 23:24:33.53 ID:F/aHSwB0.net
>>758
いや、ここVBAのスレだろ。
で、"3個"をそのまま受け取るような処理を何も考えずに書くから糞なんだよ。

まず第1にそのまま受け取る処理が良いのかどうかを考えるべきだろ。
そして、そのまま受け取るのが良いと決まってから文字列で受け取るかVariantで受け取るかどちらが良いのかとかを考える。
その結果、Variantが良いとなるならVariantを使っても良いんだよ。

で、そういう考え方で設計してたら必然的にVariantは殆ど無くなるんだ。

771 :デフォルトの名無しさん:2017/02/15(水) 23:27:25.23 ID:khJPh7n1.net
>>770
そもそもこの場合だってその可能性があるならまずstringで受け取ってから処理すりゃ良いだけのことだしな
variantである意味がほとんどない

772 :デフォルトの名無しさん:2017/02/15(水) 23:28:28.84 ID:F/aHSwB0.net
>>768
そう、意味を考える。
一緒に速度も考える。
で、意味的に型決まってても速度のメリットを取ってVariantというのが配列をぶち込む定番の処理だろ。

773 :デフォルトの名無しさん:2017/02/15(水) 23:30:58.50 ID:je/ZAYb+.net
>>770
よく考えて必然的に Variant が殆どになる場合もあるけどね

774 :デフォルトの名無しさん:2017/02/15(水) 23:41:14.47 ID:khJPh7n1.net
>>772
セルをそのまま配列にぶちこむときはそうなるな
>>773
どういう場合だ?
あんまり経験ないんだがな
目的の処理をする場合処理したい対象の型は大抵決まってるし、返したい値も決まってるだろ

775 :デフォルトの名無しさん:2017/02/15(水) 23:45:21.19 ID:je/ZAYb+.net
>>774
複数のユーザーが決める違う型の値を受け取る共通ライブラリを作る時。

776 :デフォルトの名無しさん:2017/02/15(水) 23:50:27.16 ID:khJPh7n1.net
>>775
その手の処理をしたことないんだけど、受け取ったあとに型を確定はできないのか?
どういう結果を返すんだそりゃ

777 :デフォルトの名無しさん:2017/02/15(水) 23:58:29.83 ID:je/ZAYb+.net
>>776
VarType で型を判別して分岐〜、なんてやってたら引数が複数の時は
組み合わせが爆発してしまうのでそれは(積極的には)やらない。

関数の単一目的性を守ってれば「処理できない型の値を入れたらエラーになる」という方針で破綻しないよ。

778 :デフォルトの名無しさん:2017/02/16(木) 00:01:00.36 ID:W0y5+uWS.net
>>739
だからどうしたよ?
あーだコーダいうなら頭使えよ?
スレ名を大きな声で復唱してみなさい。

779 :デフォルトの名無しさん:2017/02/16(木) 00:17:58.70 ID:SiA9A9XV.net
馬鹿はメンテに困るコードを書く
そういう馬鹿に限ってvariantを多用する
こういうことだよな

780 :デフォルトの名無しさん:2017/02/16(木) 00:32:38.95 ID:vlXKqRPM.net
>>777
いやさ、variantで受け取ってvariantで返すのか?その関数
そもそもそんなたくさんの型不定の引数を受けとるような関数は欠陥じゃないのか?

どんな環境なのか想像できんわ
あんまりそれが一般的と思わぬよう

781 :デフォルトの名無しさん:2017/02/16(木) 00:45:35.60 ID:XCVAoIB6.net
AT車に乗って、コンピューターが3速だと判断したのに、
う〜ん、そこは3速じゃねえんだよなぁとかブツブツ言いながら、
自分で2速に入れてる感じ。
キモイのでやめましょう。

782 :デフォルトの名無しさん:2017/02/16(木) 00:47:14.79 ID:NIevlqDH.net
まったく例えになってない

783 :デフォルトの名無しさん:2017/02/16(木) 00:55:11.61 ID:l4RhA8QW.net
まだやってたのか・・・この人ら

784 :デフォルトの名無しさん:2017/02/16(木) 00:57:14.89 ID:XCVAoIB6.net
分かったよ。
あんたが使ってるのは、型指定しないと動かない変なExcel。(パチモン?)
俺が使ってるのは、型指定しなくても動くExcel。
これでいいだろ。

785 :デフォルトの名無しさん:2017/02/16(木) 01:26:19.50 ID:XCVAoIB6.net
男は黙ってVariant。

Longの方が0.003秒速いとか言ってると、多分モテない。

786 :デフォルトの名無しさん:2017/02/16(木) 02:45:15.21 ID:SiA9A9XV.net
ID:XCVAoIB6

馬鹿の見本

787 :デフォルトの名無しさん:2017/02/16(木) 02:58:29.09 ID:7EemdXzw.net
ど素人だからこそvariantを多用するんだよ

788 :デフォルトの名無しさん:2017/02/16(木) 02:59:41.43 ID:nVgOLTep.net
基本、>>780の言ってることが正解。
きちんと設計すれば大抵は型が決まる。
積極的にVariantを使う特別な理由があって、分かっててVariantを使うこともあるが、普段からVariantを使うことは無い。

789 :デフォルトの名無しさん:2017/02/16(木) 04:36:21.82 ID:GoZ0ZsyN.net
Variant型で意見が分かれるのは成果物の想定が違うんだろうな。
具体的には上流工程なのか下流工程なのかで変わってくる気がする。

下流工程では引数の型は決まっているし、決まった型で返却すれば責任を全うできるけど、
上流工程ではプリミティブ型にしていても実行時に避けられない不測の事態が山ほどあるし、
下手に型決めた方がエラー吐きまくるっていう面倒な事もあるから、On ErrorとVariant型でいいやってなる場合も多い。

そして「ここは絶対に数値型で入力してください」と散々注意しても無意味に終わるから、
結局は>>777の言うような「想定外の場合にはエラーで返す」という設計が最もユーザビリティに優れる事になる。
誰かがコード見た時も、ある特定の条件でエラーとして弾いておく方が何を想定して書いたか分かりやすいしね。

790 :デフォルトの名無しさん:2017/02/16(木) 05:18:31.52 ID:INRkCvNU.net
入力する値の形まで指定するならセルの入力規則で制限するとか
ユーザーフォーム用意しといてスピンボタンや
リストボックスからの選択しか出来ない様にするとか、
variantに頼らないやりようはあると思う。
俺は自分用のマクロしか作らないんでそんな厳密なことはやってないけど。

791 :デフォルトの名無しさん:2017/02/16(木) 05:26:27.50 ID:GoZ0ZsyN.net
>>790
あるにはあるけど大人しく従ってくれると思ってはならない。

シートの書式だけを新しいブックにコピーして渡してくるくらいならまだマシで、
中途半端に機能を理解してると入力規則を消して入力した上にオリジナルに上書きしたりする馬鹿がいるからな。
俺たちの安全地帯はVBEの中だけだ。

792 :デフォルトの名無しさん:2017/02/16(木) 05:57:40.21 ID:INRkCvNU.net
そこまで言い出したらマクロのコードも改変されるだろうとか、
パスワードかけて保護しても解除されるだろうとか、キリがないよ。

793 :デフォルトの名無しさん:2017/02/16(木) 07:09:32.22 ID:5l57RGAF.net
自分のマクロさえ管理できていれば他人のマクロの型なんてどうでもいいや
お前ら布教大変だな

794 :デフォルトの名無しさん:2017/02/16(木) 07:15:37.69 ID:+lEx52V9.net
>>792
入力書式とマクロじゃレベルが全然違うだろ
極論で論破したがる人なのか?
実際やってりゃ >>791 程度は普通にある

795 :デフォルトの名無しさん:2017/02/16(木) 07:16:57.78 ID:+lEx52V9.net
>>793
アホとじゃれあってるだけだろ
2ちゃんではよく見る光景

796 :デフォルトの名無しさん:2017/02/16(木) 07:44:12.74 ID:K21kVzL8.net
>>795
お前2ちゃん詳しいんだな、今度教えてくれよw

797 :デフォルトの名無しさん:2017/02/16(木) 07:57:26.78 ID:NIevlqDH.net
マクロの改変をチェックする方法ってあるの?自分自身で

798 :デフォルトの名無しさん:2017/02/16(木) 08:08:51.07 ID:QDmfNxD1.net
単純に入力部分の不確定要素であればそれようの関数を作っておけば良いだけの話
関数の出力部分まで型が決まらないのはどういう意図かわからん
どんな分野のエクセルだとそうなるんだ
単純にそこが疑問
ちゃんと説明してもらえればスッキリするんだが

799 :デフォルトの名無しさん:2017/02/16(木) 08:24:10.85 ID:fAEKNUKM.net
配列in配列outってことじゃないの?

800 :デフォルトの名無しさん:2017/02/16(木) 08:24:11.96 ID:+lEx52V9.net
>>797
設定必要でいいなら自分自身をエクスポートしてチェックサム計算するとか

801 :デフォルトの名無しさん:2017/02/16(木) 08:27:39.22 ID:Fvt7S/mt.net
なるほど、その手があるか

802 :デフォルトの名無しさん:2017/02/16(木) 08:27:41.57 ID:7EemdXzw.net
>>799
ならば配列を型とすればいい

803 :デフォルトの名無しさん:2017/02/16(木) 08:29:01.86 ID:INRkCvNU.net
>>794
レベルの違いって、
そんな大層なもんでもないでしょ

大体、根本的には
「入力規則やマクロのコードを書き換え出来るかどうか」っていうより、
「それやっちゃったら正常に動かなくなる可能性が有る」ってことに
思い至れないようなバカ相手なら、何を考慮した所で無駄だって話じゃないかな。

804 :デフォルトの名無しさん:2017/02/16(木) 09:25:36.88 ID:QDmfNxD1.net
エクセルを入力フォーム的に使ってゴニョゴニョするようなツールなら入力時点でチェック入れるべきでしょ
違うのかな

805 :デフォルトの名無しさん:2017/02/16(木) 10:21:07.08 ID:fAEKNUKM.net
>>802
生配列を持ったクラス Array_T を作って引数は As Array_T で宣言し、関数内では中身の配列を処理するってことか。
Array_T 自身のメソッドにするなら引数は要らないな。

それはありかも。
使う側は生配列を直接渡せず Array_T にラップしなけりゃならないけど。

806 :デフォルトの名無しさん:2017/02/16(木) 10:33:49.94 ID:nVgOLTep.net
あのね、ユーザーが何を入力するかは分からんのは当然なのよ。
そんなことは分かりきってる。
だからと言ってVariantに逃げるのがおかしい。
入力されたものを最後までそのまま使おうとする神経が分からない。

その関数の引数が意味的にLongで受けるべきなら関数を呼び出すまでにLongにすべき。
ユーザーの入力が"3.25個"ならそこから3を取得してから、意味的にDoubleで受けるべきなら3.25を取得してから関数を呼び出すべきだ。
例えば平方根を求める関数なら整数以外の平方根も十分あり得る→Double、今作ろうとしている処理では絶対に整数以外になることは有り得ない→Longというように設計の段階で決めて行くべきだろ。

807 :デフォルトの名無しさん:2017/02/16(木) 10:41:23.53 ID:squjHSRZ.net
>>751
自分で解答するコードを書けば可能。
でも、事実上無理でしょうね(スキル的に)。

808 :デフォルトの名無しさん:2017/02/16(木) 10:55:09.68 ID:squjHSRZ.net
>>798
> 関数の出力部分まで型が決まらないのはどういう意図かわからん
ん?よくあることでしょ?
Function add(a, b)
  add = a + b
End Function

Sub foo()
  Debug.Print add(1, 2)
  Debug.Print add(1.2, 2.3)
End Sub

結果 =>
3
3.5

809 :デフォルトの名無しさん:2017/02/16(木) 11:22:29.10 ID:+lEx52V9.net
>>803
いやいや、入力規則を変更できる奴はそこそこいるけど、マクロまでいじる奴はそんなにいないでしょ
そもそもマクロいじるような奴なら対処できてるんだろうし

810 :デフォルトの名無しさん:2017/02/16(木) 11:33:37.99 ID:+lEx52V9.net
>>805
なんでそんなややこしいこと考えるかな
単に関数の戻り値の型を配列にするだけでしょ
VBA 配列を返す関数
でググれよ

811 :デフォルトの名無しさん:2017/02/16(木) 11:41:36.19 ID:fAEKNUKM.net
>>810
だって>>802が「配列を型とせよ」って言うからさ。
Variantは配列専用ではないし、明示的な配列型を作れって意味に捉えた。

812 :デフォルトの名無しさん:2017/02/16(木) 12:18:13.14 ID:7EemdXzw.net
>>811
俺のせいにされても困る
言いたいことは810の通りだよ

813 :デフォルトの名無しさん:2017/02/16(木) 12:25:37.98 ID:INRkCvNU.net
>>809
議論の前提条件が食い違ってるんだけどさ、
肝心なのはいじれるいじれないの問題じゃなくていじって良いか悪いかっていう所であって
俺の想定している相手なら「結果がどうなるかわからないものはいじらない」のよ。
それがマクロであれ入力規則であれ。
もちろん、分かっててやるなら入力規則だろうがマクロだろうが好きにすればいいけど、
結果も分からずにいじっちゃうのはただのバカでしょ。

数値を要求するセルに誤って文字列を入れちゃうような人は不注意な人だけど、
故意ではないだろうから
そういう人の為に入力規則で間違った型の値を入れられないようにしておく
っていう所までが俺の言っている想定の範囲。

でもその入力規則を書き換えちゃうっていうのは不注意じゃなくて故意だから
そのレベルの相手が結果を考慮せずにやってるとしたらこっちがどんな対策したっていみないよね、っていってるの。
そこに相手のスキルレベルの差なんて大した問題ではないと思うんだ。
実際、俺の職場じゃvbeでの編集ぐらいは誰でも出来るけど、
他人の書いたコードなんて不用意にいじらないし、それは入力規則でも同様。

814 :デフォルトの名無しさん:2017/02/16(木) 12:26:10.91 ID:DbYeWqRP.net
シートとか言う巨大なコンテキストをフル活用する限りコードの健全化にも限界がある

自分用に使うなら最終的に動けば良い、ただし他人の作ったマクロの引継だけは勘弁

815 :デフォルトの名無しさん:2017/02/16(木) 12:26:14.76 ID:zFIbZFKZ.net
>>739
2ちゃんの恥は書き捨てw

816 :デフォルトの名無しさん:2017/02/16(木) 12:36:03.92 ID:QDmfNxD1.net
>>808
普通にDoubleで返しちゃあかん理由あるの

817 :デフォルトの名無しさん:2017/02/16(木) 12:40:07.65 ID:b6l+qNT8.net
>>725
それを確定するんが設計ちゃうんか?(´・ω・`)

818 :デフォルトの名無しさん:2017/02/16(木) 12:40:09.54 ID:W0y5+uWS.net
>>808
この例はまさか整数と実数とかいうわけ?
説明して

819 :デフォルトの名無しさん:2017/02/16(木) 12:40:30.66 ID:fAEKNUKM.net
>>812
ああ、「配列を型とせよ」ってのは単に「配列型とせよ」って意味か!悪い悪いw

820 :デフォルトの名無しさん:2017/02/16(木) 12:43:18.64 ID:+lEx52V9.net
>>811
だから戻り値の型を配列にすればいいだろ
Function A() As Integer()
...
End Function
ってやるだけだぞ

821 :デフォルトの名無しさん:2017/02/16(木) 12:46:11.45 ID:QDmfNxD1.net
そもそもセルに入力されてるものって無理矢理文字列で処理できるからvariantである必要もないように感じる

822 :デフォルトの名無しさん:2017/02/16(木) 12:46:17.95 ID:fAEKNUKM.net
>>817
正しく設計するならGenericとかが必要になる。
3種類の型に対応する関数を3通り同じ名前で作れれば解決するけど、VBAではVariantになっちゃう。

823 :デフォルトの名無しさん:2017/02/16(木) 12:47:22.08 ID:fAEKNUKM.net
>>820
>>819

824 :デフォルトの名無しさん:2017/02/16(木) 12:49:23.78 ID:+lEx52V9.net
>>813
実際にやってみればわかる
>>791 みたいなのはわりと普通にいるけど VBE でコード改編する奴なんて見たことない

825 :デフォルトの名無しさん:2017/02/16(木) 12:50:48.75 ID:7EemdXzw.net
>>822
単純なことを複雑に考えても良いこと無いよ

826 :デフォルトの名無しさん:2017/02/16(木) 13:00:41.88 ID:fAEKNUKM.net
>>825
じゃあ引数 x が
・スカラー
・1次元配列
・2次元配列
で処理を分岐する関数をどう書く?

ByRef x As Variant とするしかないでしょ。

827 :デフォルトの名無しさん:2017/02/16(木) 13:07:57.39 ID:QDmfNxD1.net
>>826
ひとつの関数にまとめてるのに無理があるんじゃね?
そこが設計なんじゃね?

828 :デフォルトの名無しさん:2017/02/16(木) 13:15:59.12 ID:fAEKNUKM.net
>>827
内部で分岐した先の処理をPrivateな下請け関数3つに分けるのは正しいと思う。

でもユーザー(関数をライブラリとして呼び出すプログラマ)向けのPublic関数としてはひとつであって欲しいよね。

829 :デフォルトの名無しさん:2017/02/16(木) 13:20:17.99 ID:QDmfNxD1.net
>>828
そういう要望というか、仕様としてそういうもの作れってことならそうなるね
でも苦肉の策であることは間違いないと思うが
返り値が違う→用途が違う、だろ?

830 :デフォルトの名無しさん:2017/02/16(木) 13:22:32.18 ID:gZtBZE12.net
>>728
ど素人はそもそも変数定義せんのちゃう?
# 宣言無し許容がデフォルトやし

831 :デフォルトの名無しさん:2017/02/16(木) 13:22:32.42 ID:INRkCvNU.net
>>824
君の周りの事なんて一般的な前提には出来ないっていうか、
俺だったらvbeでも改変する(勿論、全部分かった上でなら、というのが前提条件だけど。)し、
わからないのなら下手にいじらない。

832 :デフォルトの名無しさん:2017/02/16(木) 13:37:58.16 ID:ha+qjoA8.net
>>826
???
ユーザー定義型配列とか普通によくあるだろ。

833 :デフォルトの名無しさん:2017/02/16(木) 13:41:53.03 ID:squjHSRZ.net
>>818
なんの説明を求められているのかわからない。

それはともかく、ExcelのビルトインオブジェクトのプロパティがVariantだらけだから、
そもそもが、Variantを排除しようというのが無理筋。

むしろ、Variantがデフォルトで、型を明示しないと動かないようなときだけそうする
という流派もあってもいい。

834 :デフォルトの名無しさん:2017/02/16(木) 13:42:48.05 ID:ha+qjoA8.net
入力規則を弄られることは考える。
それを含めて工ラ一処理作るだろ。
ただし、それはそのマクロの使用環境を考える。
広く一般的に使われることを想定するならきちんとエラー処理を作る。
でも俺の場合は殆どの場合、入力規則が無い前提でしかもVariantを使わないように作るね。

835 :デフォルトの名無しさん:2017/02/16(木) 13:45:06.19 ID:+lEx52V9.net
>>831
> 君の周りの事なんて一般的な前提には出来ないっていうか、
そのまま返すよ
そもそも改変して何をするつもりなんだよ w

836 :デフォルトの名無しさん:2017/02/16(木) 13:58:35.66 ID:INRkCvNU.net
>>835
だからこそその辺を論点にはしていない。
最初から言ってるように、
結果も把握できない改変を伴うような事をしでかす連中相手には
何をやっても無駄だと言っている。

837 :デフォルトの名無しさん:2017/02/16(木) 15:02:37.01 ID:fAEKNUKM.net
>>832
???
ユーザー定義型配列を受け入れる関数なんてあらかじめ作っておくことはできないから
そんなもん対応範囲外だろ。

838 :デフォルトの名無しさん:2017/02/16(木) 16:46:11.40 ID:ha+qjoA8.net
>>837
あのさあ、何言ってんの?
ユーザー定義型をググって来い。
Cとかで言われる構造体だよ。

話にならん。

839 :デフォルトの名無しさん:2017/02/16(木) 16:58:09.82 ID:fAEKNUKM.net
>>838
ユーザー定義型と>>826の問題にいったい何の関係があるのかと
頭大丈夫?

840 :デフォルトの名無しさん:2017/02/16(木) 17:05:09.07 ID:squjHSRZ.net
>>839
いいかげん、お前の「正しい設計論」は聞き飽きた
そろそろ黙ってくれる?

841 :デフォルトの名無しさん:2017/02/16(木) 17:36:38.86 ID:ha+qjoA8.net
>>839
ああ、そもそもの>>826が意味不明だった。
ようやっと意味が分かった。
単純に引数×は配列でOKなのにできないようなこと言うからこんがらがる

Function Hoge(strFuga() As String) As String()

End Function

入れるものが配列でない場合は呼び出し側で1個の配列にする。

Dim strHoge(0) As String
Dim strRet() As String
strHoge(0)="hogehoge"
strRet=Hoge(strHoge)

だったかな。
スマホからだから少し違ってるかもしれんが、こんなん、普通にできるだろ。

842 :デフォルトの名無しさん:2017/02/16(木) 17:47:04.29 ID:6YRpUZ/n.net
まあさ、必要ならVariantにするし不要なら型を指定するってことだろ、結論は
元はといえば全部Variantでやれないやつはプログラム組むのが下手とかよくわからんこと言うやつがいたのが発端だし論点ずれてきてるね

843 :デフォルトの名無しさん:2017/02/16(木) 18:31:43.04 ID:SiA9A9XV.net
>>842
馬鹿は何でもかんでもVaruant

844 :デフォルトの名無しさん:2017/02/16(木) 18:41:29.77 ID:7EemdXzw.net
申し訳ないが他人を馬鹿にするのはNG

845 :デフォルトの名無しさん:2017/02/16(木) 19:06:06.30 ID:eA7r2zui.net
次の検索結果を表示しています: Variant
元の検索キーワード: Varuant

グーグル先生すげえw

846 :デフォルトの名無しさん:2017/02/16(木) 19:15:18.59 ID:C8BNWAf7.net
普通に型付きで問題ないなら型付きを使う
ポリモーフェィックな動作が要求されているならインターフェースを使う
Variantを強要するAPIを使うときにVariantから型付きに変換(あるいはラップ)するときにのみVariantを使う

常識的な職業プログラマならこれが正解

品質を要求されないアマチュアならどうだっていいよ
ただし本職とは極力関わらないでくれ

847 :デフォルトの名無しさん:2017/02/16(木) 19:16:41.76 ID:eA7r2zui.net
>>762
>ループ用の変数はループに入る時点でロックされて型が決定
どこ情報で、ロックってどういう事をいってるんだ
Sub test()
Dim i As Variant
For i = CInt(1) To 3
Debug.Print VarType(i), i
i = CLng(i)
Debug.Print VarType(i), i
i = CStr(i)
Debug.Print VarType(i), i
Next
End Sub

848 :デフォルトの名無しさん:2017/02/16(木) 19:17:03.10 ID:+lEx52V9.net
>>836
なるほど >>790 の提案はお馬鹿だと言いたいのか w

849 :デフォルトの名無しさん:2017/02/16(木) 19:19:22.42 ID:+lEx52V9.net
>>847
俺が言うのもなんだが相手するなよ...

850 :デフォルトの名無しさん:2017/02/16(木) 19:22:37.22 ID:K21kVzL8.net
>>849
むしろお前以外に誰が言うんだよw

851 :デフォルトの名無しさん:2017/02/16(木) 19:31:36.39 ID:eA7r2zui.net
>>846
職業プログラマ名乗るなら言語の特性も考慮してから発言してくれ

852 :デフォルトの名無しさん:2017/02/16(木) 19:32:28.92 ID:INRkCvNU.net
>>848
何を言ってるのか論旨が不明なんだけど、既に>>813で書いた通りだよ
入力規則にせよユーザーフォームにせよ、不注意によるエラーを抑止するのが目的であって
それを意図的に改変されるような事にまで対処する気はないし必要も感じない。

だって、改変までするってことは過失じゃなくて故意だから。
まさか悪気もなく自分の行動の結果にも思い至ることがなく
ヤラカスんだったらもう救いようがないじゃん。

853 :デフォルトの名無しさん:2017/02/16(木) 19:39:30.06 ID:C8BNWAf7.net
>>851
顧慮した上での結論だろ
VBAは割と簡単に型安全性を維持できる言語なのだからあえて型安全を破る理由はない
静的型付けがそもそも存在しないVBスクリプトとかなら仕方がないがそうじゃない

854 :デフォルトの名無しさん:2017/02/16(木) 19:41:25.77 ID:fAEKNUKM.net
>>841
そうね。

典型的で単純な例は配列からのサーチかな
ある人は Long( )から数値を探す。べつの人は String( )から文字列を探す。次元も様々
Function searchFromAr(ByRef arr() As Variant, ByRef target As Variant) As Variant
って関数になると思うんだが。

返り値はarrが1次元なら最初に見つかった番号だから Long 値でいいけど、2次元の場合は(i, j)って形の配列返しになる。
どうしたって Variant だね。
プログラムの何割かはこういう汎用アルゴリズムが必要になるでしょ?

855 :デフォルトの名無しさん:2017/02/16(木) 19:42:01.60 ID:+lEx52V9.net
>>852
お前がどう言おうと入力規則を解除する奴はいるし
コードまで改編する奴は見たことない
それなりの規模の会社で実務をやってりゃ普通に経験する

856 :デフォルトの名無しさん:2017/02/16(木) 19:45:20.46 ID:+lEx52V9.net
>>854
> ある人は Long( )から数値を探す。べつの人は String( )から文字列を探す。
別々の関数にすればいいだけ

あと配列の次元って取得できるんだっけ?

857 :デフォルトの名無しさん:2017/02/16(木) 19:45:54.20 ID:eA7r2zui.net
>>853
>普通に型付きで問題ないなら型付きを使う
これには同意するけど
それ以外を本気で言ってるならVBA使うのやめた方がいいよ
Dim x As Integer
x = x + "2"
Debug.Print x
VBAの型安全なんてこんなもんだよ

858 :デフォルトの名無しさん:2017/02/16(木) 19:50:00.85 ID:MMs4mAvC.net
>>855
だね。コードなんかさっぱりわからんってのが大多数だから。

たまに気まぐれでメンドくせえ事を手入力で延々やってる同僚に
「これに入力してこのボタンを押すとすぐ終わるぞ、試してみろ」と作ってやる事があるが
まず間違いなく礼より「どこで拾ったの?」という反応が返ってくるw
実務で即使えるようなコードがネットで拾えるわけねえだろタコと思いながらも「あぁ、2ちゃんねるで」と答えてる。

859 :デフォルトの名無しさん:2017/02/16(木) 19:50:09.27 ID:C8BNWAf7.net
>>857
その程度の認識かよ
クラス使ったことないのか?

860 :デフォルトの名無しさん:2017/02/16(木) 19:51:51.28 ID:fAEKNUKM.net
>>856
それは絶対に我慢ならない。(ユーザーが)
その手の関数ぜんぶ組み込み型のバリエーション実装するなんてやってられない。

861 :デフォルトの名無しさん:2017/02/16(木) 19:55:01.54 ID:fAEKNUKM.net
>>846
職業プログラマが、なんて悪い冗談はやめてくれ

862 :デフォルトの名無しさん:2017/02/16(木) 19:55:27.26 ID:C8BNWAf7.net
>>860
コード生成すりゃいいじゃん
まあジェネリックがあれば何もしなくても解決する話だけどな
マイクロソフト仕事しろ

863 :デフォルトの名無しさん:2017/02/16(木) 19:57:00.26 ID:mpwwbLVV.net
本当にVBAは進化がないな

864 :デフォルトの名無しさん:2017/02/16(木) 20:00:46.97 ID:eA7r2zui.net
>>859
VBAはオブジェクト指向言語としては非常に不完全で、型安全も非常に弱い
クラス使おうがどうしようが変わらんよ
まあ、俺のVBAの認識がその程度だって言うならそれでいいけど
>ポリモーフェィックな動作が要求されているならインターフェースを使う
>Variantを強要するAPIを使うときにVariantから型付きに変換(あるいはラップ)するときにのみVariantを使う
>VBAは割と簡単に型安全性を維持できる
なんて主張するお前のVBAに対する認識の方が俺には疑問だわ

まあ、議論しても分かりあえなさそうだからレス要らないよ

865 :デフォルトの名無しさん:2017/02/16(木) 20:09:28.70 ID:6YRpUZ/n.net
必要ならvariant使うのはそれはそれで当たり前だろ
それに議論の余地はねえよ
引数と返り値がvariantでも関数の内部まで全部variantで処理するのかって言うね
>Dim x As Integer
>x = x + "2"
>Debug.Print x
>VBAの型安全なんてこんなもんだよ
これなんかは、「こういうコードを書かない」って言うのが大事なんであって書けるからオーケーってのは美意識無さすぎだろう
例え変数がvariantでも足し算するならキャストするだろ

866 :デフォルトの名無しさん:2017/02/16(木) 20:10:59.51 ID:+lEx52V9.net
>>858
そもそも普通の人は開発タブの存在も知らんだろうし
まあ >>792 の職場はパスワード保護も突破されるようなスーパーハッカーだらけなんだろう w

867 :デフォルトの名無しさん:2017/02/16(木) 20:11:24.07 ID:INRkCvNU.net
>>855
君がどう言おうがって、俺は改変する人がいないなんて一言も言ってないよ。
ただし、コードを改変する人が居ないとも思わないけど。
そして、それは論点ではない、ということならもう何度か言ってるんだが。

868 :デフォルトの名無しさん:2017/02/16(木) 20:16:07.54 ID:eA7r2zui.net
>>865
別人?
そう言うコードを書いてOKだとは言ってないよ
とうぜんそう言うコードは書くべきではなくて、ちゃんとキャストすべきだけど
それはVBAが比較的型に安全だっていう発言への反論だからな
そういうコードをチェック出来るのが型に安全だって事じゃないのかと

869 :デフォルトの名無しさん:2017/02/16(木) 20:16:28.83 ID:+lEx52V9.net
>>860
> それは絶対に我慢ならない。(ユーザーが)
> その手の関数ぜんぶ組み込み型のバリエーション実装するなんてやってられない。
必要分だけ実装すりゃいいだろ
Currency 型なんて一生使わない奴の方が多いだろうし
わがまなユーザーなら型云々より文字型だけど数値として検索してくれ("123" で検索したら "0123" もヒットする)って言うような要望の方が多い気がする

870 :デフォルトの名無しさん:2017/02/16(木) 20:19:06.26 ID:+lEx52V9.net
>>867
> そして、それは論点ではない、ということならもう何度か言ってるんだが。
論点でないと言うならレスしなきゃいいんじゃね?
俺は論点をお前に合わせる気はないし義務もないから

871 :デフォルトの名無しさん:2017/02/16(木) 20:21:29.95 ID:7EemdXzw.net
不毛だなぁ

872 :デフォルトの名無しさん:2017/02/16(木) 20:22:44.58 ID:+lEx52V9.net
>>868
完全じゃないってだけでしょ
程度問題なだけで他の言語にも似たような自動変換はあるし

873 :デフォルトの名無しさん:2017/02/16(木) 20:29:25.58 ID:6YRpUZ/n.net
>>868
なんか横やりすまんな
型が安全じゃないからしっかり指定すべきってことが言いたい?

874 :デフォルトの名無しさん:2017/02/16(木) 20:30:36.77 ID:eA7r2zui.net
>>872
完全じゃないのは当然
程度問題だけど、比較的安全か比較的危険かって話
暗黙の変換、それも縮小変換を実行前にチェックも禁止もできない以上、比較的危険だろって言うのが俺の主張だってだけ

875 :デフォルトの名無しさん:2017/02/16(木) 20:34:37.84 ID:/2/7lRCG.net
>>874
もっとゆるゆるの言語もたくさんあるからそこに噛みついてもそれこそ不毛なだけだね

876 :デフォルトの名無しさん:2017/02/16(木) 20:37:09.91 ID:GoZ0ZsyN.net
今回の流れでVariant型嫌いってのはIT系企業か何かの、いわば無菌室的な環境で出来上がるもんなんだろうってのが推測出来て面白いな。

周りに理解者のいない一人社内SEとかやってると本当に色んなヤツに遭遇する。
まじで「余地があれば絶対にやる」ってレベルで問題が起きるし、設計・開発・保守・拡張を一人で回すからコードの一つ一つに拘ってられない。
「とにかくデータをぶち込めば動いてくれる」という関数がないと追っつかない状況も生まれる。

ワークシートに挿入する際にVariant型以外だと表示形式が変わるなど余計な作用を生んだり、関数が文字列で入るなんて事もある。
だからマクロを濫造する上で、Variant型のままで運用し、それが及ぼす影響を理解しておく方が有利という環境もある事を覚えておいてほしい。

877 :デフォルトの名無しさん:2017/02/16(木) 20:42:31.73 ID:/b6gNV/R.net
そもそも仕事の話をするなよ

878 :デフォルトの名無しさん:2017/02/16(木) 20:50:13.72 ID:6YRpUZ/n.net
>>876
気の毒やね

879 :デフォルトの名無しさん:2017/02/16(木) 20:51:15.05 ID:eA7r2zui.net
>>873
指定すべきがどうかは上で散々やってるけど、俺の意見としてはスタイルの問題でどっちでもいい
俺自身は俺の作るVBAプログラムで型を指定してないのは、手抜きだな
(Variant使うなって話じゃないよ。つかうなら原則As Variantで明示する)

ただ、意識して型指定するのはいいけど
指定したからといって言語側が型チェックをちゃんとやってくれると思うなよって話

880 :デフォルトの名無しさん:2017/02/16(木) 20:53:55.17 ID:7EemdXzw.net
目的を果たせれば何だっていいんだよ

881 :デフォルトの名無しさん:2017/02/16(木) 20:54:30.77 ID:INRkCvNU.net
>>870

いや、改変云々を論点にしたいならそれでもいいけどさ、
それでどうなるの?

マクロなら改変されなくて入力規則は改変されるっていうのは
個人の感想に過ぎないから証明のしようは無いよ。
このスレでアンケートでも取る?
ほぼ全員がVBA使ってるこのスレじゃ意味無いと思うけど。

882 :デフォルトの名無しさん:2017/02/16(木) 21:00:36.04 ID:6YRpUZ/n.net
>>879
おっしゃる通りである
しかしまあ、変数に入れる値の型が明らかな場合はちゃんと指定すべきだと思うけどね
スタイルの差と言われたらそれまでだけども
>>880
保守が全くいらなければその通り

883 :デフォルトの名無しさん:2017/02/16(木) 21:04:42.50 ID:GoZ0ZsyN.net
>>881
俺はマクロまで改変(というかデバッグボタンポチーからの黄色い行削除)された経験あるわ。
だから出来るだけ何も分からないユーザーの目の前に、マクロの挙動を左右する何かを差し出さない方がいい。

なので全ての入力はVariant型で受け取ってマクロ内で型チェックしてMsgboxで処理出来ない旨のメッセージを発行する。
間違っても実行時エラーのメッセージボックスとかそのまま表示させちゃダメ。
あと全員が全員やるってわけじゃないから作業者を限定するとかマクロ外での対処も有効。

884 :デフォルトの名無しさん:2017/02/16(木) 21:07:45.31 ID:MMs4mAvC.net
>>876
>設計・開発・保守・拡張を一人で回すからコードの一つ一つに拘ってられない。
発狂しそうな環境ですねw
前に見たブログで「キナコ」と名乗っている自称事務系OLさんが書いているコードがもう、ありとあらゆるエラーを想定した
ものだったんだが、現場で実用になるコードってのはこういうもんか、俺にはちょっと無理だなと思ってしまった。
「非常用、押すな」と書いてあるボタンを押したがるバカでも安心して使える設計とか母性が無けりゃ無理なんじゃねえかなw

885 :デフォルトの名無しさん:2017/02/16(木) 21:16:50.35 ID:eA7r2zui.net
>>882
思いついた俺が型指定したいのにVariant使う状況ちょろっと書いとくわ
For Eachで使うループ変数
Nullが必要な場合(DB連携なんか)
こいつらはどうしようもない

後はStatic変数とかで初期化チェックにNothing使うときとかも使うか

>>883
>デバッグボタンポチーからの黄色い行削除
あるねぇ
完璧な実行時エラー排除はなかなか難しい
ACCESSならmde(accde)で配布するからまだマシなんだけどねぇ
EXCELにVBAコンパイルしてコード除去するオプションとかないよな?

886 :デフォルトの名無しさん:2017/02/16(木) 21:19:33.55 ID:W0y5+uWS.net
>>833
なにを主張したいコードなのか説明して

887 :デフォルトの名無しさん:2017/02/16(木) 21:39:42.51 ID:YyV7ugT9.net
>>885
まあ設計に無理があるかミスしてるかだねえ
今作ってるツールでテキストボックスの名前で入力するのを指定してるんだが、命名ミスって仕方なく数値と文字受け入れるようにしてるわ
まあ別にVariant全否定するつもりはないから
「仕方ないとき」はあるからね

888 :デフォルトの名無しさん:2017/02/16(木) 21:42:12.62 ID:YyV7ugT9.net
デバッグに飛ばないようにする努力はあらゆる場面で必要だろう
受け入れ緩くするのもありだが関数ごとにきっちりエラー処理するのが理想じゃね?

889 :デフォルトの名無しさん:2017/02/16(木) 22:14:54.98 ID:W0y5+uWS.net
>>888
でおとしどこは?

890 :デフォルトの名無しさん:2017/02/16(木) 22:29:25.87 ID:C8BNWAf7.net
>>876
それってさ雑な仕事してるから炎上するんだよね
手抜きのクソコードを書くとそのコードのせいでさらにクソコードを書くはめになる
クソコードはクソコードを呼ぶので加速度的にクソコードが増えていき生産性がガタ落ちになる
ようするに技術的負債ってやつだよ
借金は雪だるま式だ

891 :デフォルトの名無しさん:2017/02/16(木) 22:42:46.83 ID:XCVAoIB6.net
使う人に、シート名変えないでね、とか、
全角入れないでね、とか言って渡せばいいんだよ。

変なエラー回避に時間かけてるから、
貴方の仕事は遅いのです。

892 :デフォルトの名無しさん:2017/02/16(木) 22:53:40.42 ID:2OM8+5/j.net
そういう仕事の話はよそでやってほしいね

893 :デフォルトの名無しさん:2017/02/16(木) 22:56:48.57 ID:K21kVzL8.net
このヨチヨチコード放談いつまで続くの?

894 :デフォルトの名無しさん:2017/02/16(木) 22:57:04.52 ID:GoZ0ZsyN.net
>>890
別に炎上したなんて話してないし、むしろVariant型の挙動を利用して生産性第一で作業してるって話なんだけど。
なんかアンカー先間違えてないか。

895 :デフォルトの名無しさん:2017/02/16(木) 23:00:55.40 ID:3jDFm3bn.net
>>881
程度問題ってだけの話
まあお前さんのところはスーパーハッカーの集団みたいだけど w

896 :デフォルトの名無しさん:2017/02/16(木) 23:02:47.89 ID:3jDFm3bn.net
>>885
セルからデータ受けるときは基本 Variant で受けて型判定してるな

897 :デフォルトの名無しさん:2017/02/16(木) 23:03:10.14 ID:YyV7ugT9.net
>>889
on error goto でエラートラップ
そんなに不安なら関数全部につけりゃ良い
チェックするのなんて入力の値だけで良いんだからそんな手間でもないだろ

898 :デフォルトの名無しさん:2017/02/16(木) 23:04:12.76 ID:YyV7ugT9.net
>>893
VBAのスレである以上避けられないから新しい話題くれよ

899 :デフォルトの名無しさん:2017/02/16(木) 23:26:38.52 ID:qi3MJmNL.net
質問というかただの疑問なんですが
excelのカメラ機能(図のリンク貼り付け)を使用している場合VBAを実行した際に明らかに速度が遅くなる現象の原因が分かる方っていらっしゃいますか?
またカメラ機能を使わない以外で上記の現象を回避されてる方はいますか?

900 :デフォルトの名無しさん:2017/02/16(木) 23:39:12.04 ID:C8BNWAf7.net
>>894
でもそれって生産性あげたつもりになってるだけだよ
局所的に見て楽になったような気がするのかもしれないけど実際には問題を増やしてしまっている
こういう雑な積み重ねが保守不能なコードに化ける
Variantから脱却すれば今より仕事が早くなるから考えてみたら

901 :デフォルトの名無しさん:2017/02/16(木) 23:41:26.65 ID:2OM8+5/j.net
その二人のコードを見たら大して違いはなく、自己評価の甘辛だけだったりして

902 :デフォルトの名無しさん:2017/02/16(木) 23:56:50.03 ID:relaIxlm.net
>>900
いいんだよ
Variantで満足してる人は型を求めていない
求めていないものを押し付けても押し返されるだけだよ

さくっとしたマクロとしてもがっつりしたツールとしても使えるんだから用途に応じて使い分ければいい
同様に使う人も多様であっていいんだよ

903 :デフォルトの名無しさん:2017/02/17(金) 00:03:22.12 ID:Egl82kKQ.net
>>899
全部の処理が終わってからカメラ機能を使う

904 :デフォルトの名無しさん:2017/02/17(金) 00:24:00.15 ID:x+j5W1y3.net
>>903
なるほど、ありがとうございます。
ちなみに他ブックを同時に開いている場合に
その他ブックがカメラ機能を使用している場合の対処法は何かありますか?

905 :デフォルトの名無しさん:2017/02/17(金) 00:25:05.32 ID:LNGtkd31.net
>>902
利用側はそうかもしれんけど作る側は潔癖であるべきじゃね?
なかなかできないけど

906 :デフォルトの名無しさん:2017/02/17(金) 00:35:35.78 ID:ZUGFk9a/.net
Variantばかり使うのはゆとりの馬鹿と思って外れる確率はゼロに近い

907 :デフォルトの名無しさん:2017/02/17(金) 01:02:04.84 ID:Yk2QF6YV.net
生産性を考えたらc#になった

908 :デフォルトの名無しさん:2017/02/17(金) 02:14:58.21 ID:0Mgboldt.net
PasteSpecialで貼り付けをすると数値が文字列になっちゃうんだけど
これどうしたら良いの…?

909 :デフォルトの名無しさん:2017/02/17(金) 02:28:45.78 ID:iYHKBeW3.net
>>908
xlPasteAllを指定する

910 :デフォルトの名無しさん:2017/02/17(金) 05:48:13.21 ID:SExp+Ria.net
>>905
べき論はよくわかんないけど細かいルールはプロジェクト単位で決めればいいのよ
全ての人が統一したルールで開発とか無理がある

まずは目的を果たせればいいんだよ

911 :デフォルトの名無しさん:2017/02/17(金) 07:02:50.19 ID:C9lFCZn0.net
大事なのはあくまでも自分用ツールとして他人に使わせないことだな

912 :デフォルトの名無しさん:2017/02/17(金) 07:06:32.57 ID:YWoqzdEN.net
>>911
大多数のVBAプログラムはそうだし、ここでも暗黙にそういう前提だろうね

913 :デフォルトの名無しさん:2017/02/17(金) 07:22:23.36 ID:zu1SJ23X.net
横槍で申し訳ないが、
なぜ「型はきちんと合わせて使う」とか
「Variantは極力使わない方が良い」とか言われているのかを
まずきちんと理解していないことには議論にもならないと思う。

逆を言えばそれさえ理解していれば後は作る側の部署なり個人なりの判断だろう。

Variantはほぼ何でも設定出来る便利な型だけど
メモリを圧迫したり暗黙の変換によって意図しない挙動を引き起こしたりする
使い方を知らないと非常に危険な型とも言える。

だから上で誰かが言っていた通り、使うべくして使うところで使うという考え方で良いと思う。

ただ、俺的には全て型宣言無しである程度の大きさのプログラムを組むような暴挙に出ることは
辞めておいた方が良いとは思うけどね。

914 :デフォルトの名無しさん:2017/02/17(金) 07:37:21.18 ID:hoKx2dYD.net
自由とはコストやリスクがかかるもの

他人が関係しない小さい、狭い範囲内なら何やってもいいけど

915 :デフォルトの名無しさん:2017/02/17(金) 08:09:54.80 ID:6fUPUfvd.net
>>910
限られた範囲内で可能なかぎり品質の良いコードを書く努力をすべきだ、という話
VBAだとメンテナンス性とか軽んじられるからね
うちの現場はコーディング規約もありゃしないからひどいもんよ
だから俺の場合は自己満だけどね

916 :デフォルトの名無しさん:2017/02/17(金) 08:37:35.15 ID:57XKQRPM.net
>>913
「型宣言なし」の話は議論になってないよ。

917 :デフォルトの名無しさん:2017/02/17(金) 08:37:52.73 ID:57XKQRPM.net
>>915

仕事の話はやめるべきだ。そもそもプロのプログラマが語り合う場じゃないし。

918 :デフォルトの名無しさん:2017/02/17(金) 09:21:29.04 ID:4vjdAmpk.net
>>916
すべて型宣言なし = 全部variant

919 :デフォルトの名無しさん:2017/02/17(金) 10:01:59.38 ID:/Ik0xHA1.net
>>917
えっ?

920 :デフォルトの名無しさん:2017/02/17(金) 10:34:33.71 ID:iYHKBeW3.net
スレタイ

雑談スレはちゃんと別に用意されてる

921 :デフォルトの名無しさん:2017/02/17(金) 11:32:15.12 ID:t6AZ1KOU.net
>>904
他ブックはデータソースですか?
だとしたら、そのブックでカメラ機能を使わないという選択はできますでしょうか。
見栄えを良くして重くなったファイルをデータソースにするのではなく、目的がデータ保存だけのファイルを作って、それを参照して見栄えの良いファイルを複数作るという考え方です。

922 :デフォルトの名無しさん:2017/02/17(金) 11:43:15.20 ID:57XKQRPM.net
プログラマって自虐的なんだな

ここでの「仕事」つったらExcelを仕事に活用しているビジネスマンのやってる事だよ。
プロが現れて「プロならこうあるべき」なんて見たこともない。ドン引きそのものだ。ツイッターでやれ。
自分の職業をわざと貶めてるのか?

923 :デフォルトの名無しさん:2017/02/17(金) 12:52:58.35 ID:loItl+7k.net
>>922
どの板に書いてるのかをよ〜く考えてからレスしなよ...

924 :デフォルトの名無しさん:2017/02/17(金) 12:58:20.11 ID:57XKQRPM.net
>>923
音楽板にプロのミュージシャンは日常的に出てこないしスポーツ板にJ選手は出てこないしカメラ板にプロカメはこっそりしか出てこないわ。

奇異に感じねーのか?

925 :デフォルトの名無しさん:2017/02/17(金) 13:00:23.80 ID:zgFjy358.net
dim a as variant
dim b as long
a = range("A1").value
' aが整数値であることのvalidationコード
b = a

みたいなコードを書いてるんですかね、このスレのプロ様は

926 :デフォルトの名無しさん:2017/02/17(金) 13:05:22.14 ID:6fUPUfvd.net
>>924
所詮サラリーマン

927 :デフォルトの名無しさん:2017/02/17(金) 16:07:46.96 ID:fQ7GKGL6.net
>>854
何言ってんだよ。
返り値が1次元だろうが2次元だろうが配列で返せる。

ただ、俺の例もそうだけど、こういう関数事態が糞関数だ。
引数が1次元でも2次元でもOKという時点で地雷臭がする。

こういうコード書く奴はエラー処理も碌にしないことが多い。
逆に型をきちんと指定する奴は、エラー処理の想定込みで指定する。

928 :デフォルトの名無しさん:2017/02/17(金) 16:19:46.97 ID:loItl+7k.net
>>924
ん?
> ここでの「仕事」つったらExcelを仕事に活用しているビジネスマンのやってる事だよ。
に突っ込んでるんだが?
Excel の使い方の話ならよそでやってくれよ

929 :デフォルトの名無しさん:2017/02/17(金) 16:44:49.17 ID:57XKQRPM.net
>>927
1次元ならLong値を返す、と書いてるじゃないか。

あとこれは完全に後出し(書き忘れた)なので根拠にはしないけど、見つからなかった場合はEmpty を返したい。

それとこういうライブラリ関数はあまり丁寧なエラー処理はしないよ。アプリに近い上流側でやるべき。

930 :デフォルトの名無しさん:2017/02/17(金) 17:24:57.59 ID:fQ7GKGL6.net
>>929
だからそんな関数は作っちゃダメなんだよ。
設計してないからそんなことになってるんだろうけど。

だからエラー処理は受ける前にやるの。
変な引数自体受け取らないで済むように。
丁寧に作る時は両方でやることもある。

931 :デフォルトの名無しさん:2017/02/17(金) 17:33:56.58 ID:fQ7GKGL6.net
それに、どうにも仕方無しにVariantになることもあるけど、そんなのはめったに無い。

どんな型でもOKな配列からサーチすることなんて殆ど有り得ない。
本来なら型指定の配列からサーチする関数でもOKな所を便利だからと使ってるだろうと推測する。
→それはどんな変数でもVariantにするのと全く同じ弊害を持つことになる。

932 :デフォルトの名無しさん:2017/02/17(金) 17:36:48.43 ID:fQ7GKGL6.net
あとEmptyの話を書くからお里が知れる。
これだけでもレベルが分かる。

933 :デフォルトの名無しさん:2017/02/17(金) 17:40:48.67 ID:zgFjy358.net
>>930
> だからエラー処理は受ける前にやるの。
> 変な引数自体受け取らないで済むように。
呼び出し側でエラーチェックするってことか?
プロ様は大変ですな

934 :デフォルトの名無しさん:2017/02/17(金) 17:52:20.28 ID:57XKQRPM.net
>>930
エラー処理は渡す側の責務と受けとる側の責務に分けられるが、例えば平方根を求める関数でマイナス値のチェックなど普通はしない。

935 :デフォルトの名無しさん:2017/02/17(金) 18:05:05.67 ID:fQ7GKGL6.net
>>933
全然大変じゃない。
インテリセンスからでも渡して良いものがわかるし、他の奴が使ってもおかしなことになりにくい。
他の奴が作ってても型指定してあれば使い方も分かりやすい。

むしろ何でも受け取るような関数作る方が後々大変なことになる。

Sub Test1()
Debug.Print LongToString("ABC")
End Sub
Function LongToString(varIn As Variant) As Variant
LongToString=varIn*3
End Function

Test1を書いてる時に"ABC"ではダメだと気付かない。
型指定してあればインテリセンスから"ABC"なんて入れることは有り得ない。

936 :デフォルトの名無しさん:2017/02/17(金) 18:06:26.44 ID:6fUPUfvd.net
>>925
longがほしいならisnumericでセルの値を時かにチェックすればよろしくないか
どちらにしてもその値を処理するならどんな値かのチェックは必要だと思うんですが

937 :デフォルトの名無しさん:2017/02/17(金) 18:08:34.57 ID:fQ7GKGL6.net
>>934
それは型指定しててもあり得るだろ。
引き数をVariantにした平方根を求める関数でマイナスをチェックするなら型指定しててもするだろう。

938 :デフォルトの名無しさん:2017/02/17(金) 18:10:40.07 ID:57XKQRPM.net
あと>>854に間違いがあったので念のため訂正しとく。

Function searchFromAr(ByRef arr() As Variant, ByRef target As Variant) As Variant

ではなく、

Function searchFromAr(ByRef arr As Variant, ByRef target As Variant) As Variant
だ。

arr( ) じゃなくただの arr

939 :デフォルトの名無しさん:2017/02/17(金) 18:15:31.89 ID:fQ7GKGL6.net
オブジェクトにおけるインターフェースの重要な役割が分かってれば型指定する筈なんだけどな。
そもそも他言語を知ってればVariantでOKという発想にはならんだろう。

もっともOKな奴がいるからVBが不評なんだけどな。

940 :デフォルトの名無しさん:2017/02/17(金) 18:18:49.17 ID:6fUPUfvd.net
>>939
片付けがあやふやなんだから指定しなくてokってのがいるけど、そら逆でしょって思うわ

941 :デフォルトの名無しさん:2017/02/17(金) 18:25:09.55 ID:zgFjy358.net
>>935
Function LongToString(varIn As Long) As Long
と定義しておこうが、
LongToString("ABC")
と書けちゃうし

dim a as variant
dim b as string
a = range("A1").value
' validation code here
b = LongToString(a)
とか書くのか
LongToStringを100箇所呼び出してると100箇所でやるのか
お疲れ様です

942 :デフォルトの名無しさん:2017/02/17(金) 18:26:21.82 ID:fQ7GKGL6.net
>>938
そんなの見た瞬間から気付いてたが関数の中身が無いから一概に間違いとも言えない。
配列(Variant)を配列に入れることもある。
実際に俺も()付きの方の関数作ったことある。
Variantは普通は使わない方が良いが、例外の定番であるRangeをVariantで受けて高速化する方法でRangeが複数の場合がこれに該当した。
戻り値はVariantじゃ無かったけど。

943 :デフォルトの名無しさん:2017/02/17(金) 18:33:49.68 ID:zgFjy358.net
>>936
取り得る戦略はいくつもあるし
型を明示する場合でも
dim a as long
a = range("a1")value
1. デフォルトのruntime errorでエラー検知のみ
2. on error gotoでエラートラップ
3. セル参照時に1個1個validation

毎回3やれとか言われても疲れるし

944 :デフォルトの名無しさん:2017/02/17(金) 18:34:02.47 ID:TnLGa8QJ.net
>>899
ちょっと前に同じ現象ではまりました。困ったバグです。
カメラ機能の使用数に対し、等比級数的に処理時間が遅延。
オンメモリなら自/他ブックの区別なく影響を受けます。

要はカメラ機能を維持していることがNGなので、必要な時に更新して
機能を止めればいいです。
実はShapeオブジェクトに参照式が入っているだけなので、

 ソースセル内容編集
→ Shapes(1).DrawingObject.Formula=(参照範囲)
→ Calculate
→ Shapes(1).DrawingObject.Formula=""

これでShape内の画像は残り、リンクは切れてただの図形になります。
2〜3個あったカメラのリンクを切ったことで、数百秒に遅延した
シートイベントがmsecレベルに短縮されました。 ご参考まで。
ちなみにScreenupdatingの制御は逆に遅延の原因になることがある
ので注意して使うほうがよいです。

945 :デフォルトの名無しさん:2017/02/17(金) 18:35:34.78 ID:57XKQRPM.net
>>930
ん?「受ける前にやる」って呼び出し側でやるって意味か?

946 :デフォルトの名無しさん:2017/02/17(金) 18:35:59.64 ID:fQ7GKGL6.net
>>941
インテリセンス知らんのか?
書けても実際には書かれない。
分かる?初心者君。

100個所呼び出すって何だよww
ユーザ―インターフェースと関数を分離する意味が分からないなら関数作らずに全部イベントの所に書いてろw

947 :デフォルトの名無しさん:2017/02/17(金) 18:37:51.59 ID:zgFjy358.net
>>945
実引数のチェックは100%やるべき
余裕があったら関数内でもやるけどね

って意味だと取った
ふつー逆でしょ

948 :デフォルトの名無しさん:2017/02/17(金) 18:40:11.45 ID:57XKQRPM.net
>>941
いやそれは書けん(関数本体に入る前にエラー)だろ

949 :デフォルトの名無しさん:2017/02/17(金) 18:40:47.16 ID:zgFjy358.net
>>946
> 書けても実際には書かれない。
またへんなこと言い出した

もしそうなら、実引数のチェックなんていらないよね
だって、間違った型の変数渡さない(書かない)ってことでしょ?

950 :デフォルトの名無しさん:2017/02/17(金) 18:42:27.09 ID:zgFjy358.net
>>948
関数に入る前って実行時ってことでしょ?
書けてるじゃんw

951 :デフォルトの名無しさん:2017/02/17(金) 18:44:30.55 ID:zgFjy358.net
>>946
> 100個所呼び出すって何だよww
何だよって、関数吐くったら呼び出すのは1回だけかよ

頭痛くなってきた

952 :デフォルトの名無しさん:2017/02/17(金) 18:45:06.96 ID:6fUPUfvd.net
>>943
楽に書きたいんだったらon error gotoで良いんじゃね
そんなんはvariantでやろうがなんだろうが一緒だろ
>>941の例なんかだと、ユーザー側が間違った記述してんだからエラー吐いて当然でしょ
それを許容して返り値で判断させる関数を求められてるならそういう作りにするだけ

953 :デフォルトの名無しさん:2017/02/17(金) 18:45:55.53 ID:57XKQRPM.net
エラーチェックはなるべく呼び足す側がやるってのは俺が>>929で書いたまさにそのことじゃんか。

954 :デフォルトの名無しさん:2017/02/17(金) 18:48:28.19 ID:zgFjy358.net
>>952
ある関数の前提条件を誰が担保するかの話をしてるんだけど

仮に呼び出し側が担保すべしというポリシーにしたとしても、間違った型の値は渡されうる
だって、書けちゃうんだから

だから、担保するなら呼ばれる方

955 :デフォルトの名無しさん:2017/02/17(金) 18:52:31.72 ID:6fUPUfvd.net
>>954
何だか俺横槍がまずかったみたいだな
とりあえず俺のレスは取り下げで

956 :デフォルトの名無しさん:2017/02/17(金) 19:00:12.08 ID:fQ7GKGL6.net
>>949
だから何で分からんの?バカなの?

LongTοString(

までキー入力した時にvarInがLongだと分かるんだから"ABC"入れてもエラーになると分かるから書かれない。

For i=1 To 100
If IsNumeric(a) Then 'aの範囲気にする処理なら別のチェック
b=LongToString(a)
EndIf
Next i

とすればそもそも1度も呼び出されないこともある。
こんなのは関数の使われ方によって変わる。
場合によってはVariantで受けることも有るだろう。
そういう、状況を無視して100個所とか言うから笑われるんだよ。

957 :デフォルトの名無しさん:2017/02/17(金) 19:02:20.94 ID:57XKQRPM.net
>>954
間違ってるな。

呼び足す側がコントロールできることは呼び足す側が責任をもつ。
処理過程で発生するエラーなどは呼びだされる側でしかコントロールできないから呼び出される側でチェックする。

「引数が正しい型か?」は呼び出し側で静的にチェックできること。

958 :デフォルトの名無しさん:2017/02/17(金) 19:09:34.20 ID:57XKQRPM.net
あと前提として Variant でなければならない限り使うな、というのは正しいし、面倒だから Variant にするというのは望ましくない。

それを踏まえて、
同じアルゴリズムを違う型に適用するためコピペして関数名を変えて使うのは最低の行為だ。

959 :デフォルトの名無しさん:2017/02/17(金) 19:21:54.70 ID:fQ7GKGL6.net
>>954
お前のやり方では使う方がvarInに"ABC"入れてダメなのかが分からない。
それで入れて実行時にエラー処理ではねられる。
というよりその関数の使い方が分かりにくい。
それだったら関数なんて作らない方が良い。

960 :デフォルトの名無しさん:2017/02/17(金) 19:27:49.71 ID:fQ7GKGL6.net
ちゅうかね、関数先に作ったりするわけよ。
平方根求める関数ならどういう処理か分かるだろ。
別に後に作る場合でも関数がどうであるべきかを考えて実装する。

そもそも何でもVariantで良いなら型なんて必要無いだろ。
もしかしてVBScriptの方が正しいと思ってる?

961 :デフォルトの名無しさん:2017/02/17(金) 19:30:25.17 ID:h6UWdVSZ.net
自分しか使わないなら呼び出された側でチェックする必要ないけど
悪意あるユーザがスタックオーバーフローとかインジェクションとか目的としてたらセキュリティ的にまずい事になる

962 :デフォルトの名無しさん:2017/02/17(金) 19:33:24.00 ID:DzGsmJeY.net
Variantで受けることが標準なのだとしたらExcel標準の関数が型指定となってる理由は何なのだろうね

963 :デフォルトの名無しさん:2017/02/17(金) 19:44:57.51 ID:DzGsmJeY.net
>>719以降が不毛な内容で埋まってるのはなかなかすごいことだと思った

964 :デフォルトの名無しさん:2017/02/17(金) 19:45:19.30 ID:loItl+7k.net
>>925
人に使ってもらうマクロならその程度のチェックは当たり前にやるけど?

965 :デフォルトの名無しさん:2017/02/17(金) 19:47:28.23 ID:57XKQRPM.net
>>961
それは上流の話だな。下流では「謝った引数を入れたら結果は未定義」でok

966 :デフォルトの名無しさん:2017/02/17(金) 19:54:46.13 ID:57XKQRPM.net
呼び出される側の処理を書くときは

・エラーが起こる条件が明確
・その条件に当てはまるかどうか事前に確認できる

この二つを満たすように工夫してるし、実現できた場合はエラーチェックは「しない」

967 :デフォルトの名無しさん:2017/02/17(金) 20:00:13.54 ID:6fUPUfvd.net
>>958
型が違うってのは結果が違うんだぞ?
上の例みたいに例外の場合emptyを返すって用件ならそりゃvariantだろうけども
少なくとも明示的にどんな値が返るのかわかるような関数じゃないと色々まずいだろ

968 :デフォルトの名無しさん:2017/02/17(金) 20:01:41.42 ID:h6UWdVSZ.net
>>965
ユーザが使って業務がストップしたらまずくね?
いくらテストしてもバグがないことは証明出来ないよ

969 :デフォルトの名無しさん:2017/02/17(金) 20:12:43.27 ID:8qknrLBg.net
なんかもうVBAの話してねぇな。

ユーザー定義関数なのに定義を追っていって中身を確認出来ない状況とか、
実行時エラーが会社の命運を決めるような事態を引き起こすとか、
そんなものをエクセルで動かす狂気の会社なんかあるわけないだろ。

・・・ないよな?

970 :デフォルトの名無しさん:2017/02/17(金) 20:18:39.08 ID:LyP8mvbq.net
なんかそろそろ
"Variant型を議論するスレ"
見たいなの作って そこでやって欲しい気分だな

971 :デフォルトの名無しさん:2017/02/17(金) 20:34:36.32 ID:0Mgboldt.net
>>909
ちゃうねん
関数とか他シートの参照とかでごちゃごちゃしたシートから
値だけ入ったシートを作るために四の五のしてからPasteSpecialのxlPasteValuesAndNumberFormatsを指定して貼り付けてるんだけど
そうすると何故か数値になってる部分が全部文字列扱いになるの…
なんか俺オプションの勘違いしてるかな

972 :デフォルトの名無しさん:2017/02/17(金) 20:36:15.65 ID:57XKQRPM.net
>>967
型は静的に指定できるじゃないか。

'***この関数の引数と返り値の関係は以下の通りです***
'1次元配列→Long値
'2次元配列→長さ2の 1次元配列
'N次元配列→長さNの 1次元配列
'ただし見つからなかった場合は Empty
'配列の各要素とターゲットの値は = で比較可能であること
'**************+++++++++++

誰も困らないだろ

973 :デフォルトの名無しさん:2017/02/17(金) 20:38:15.99 ID:DzGsmJeY.net
>>972
動的ですね

974 :デフォルトの名無しさん:2017/02/17(金) 20:38:20.38 ID:loItl+7k.net
>>969
会社の命運はないと信じたいけど

今日はB子ちゃんとデート♪
これを処理してっと...

ピポッ
エラー 13 「型が一致しません。」

お前らの命運やいかに

975 :デフォルトの名無しさん:2017/02/17(金) 20:41:06.37 ID:57XKQRPM.net
>>973
静的に「指定」できる
関数の挙動はそりゃ動的だよ。
でも引数と返り値の関係は静的。

976 :デフォルトの名無しさん:2017/02/17(金) 20:44:59.92 ID:3DJT3WqG.net
シートのセルをコピーして別シートに図のリンク貼り付けすると、コピーしてないセルまで図化してしまうんだが・・・

例としてはA1をコピーして図のリンク貼り付け→A1〜A3を結合した図が出る

問題なく貼り付けられる場合もあるし・・・よく分からん

977 :デフォルトの名無しさん:2017/02/17(金) 21:04:06.39 ID:BVl9fCvE.net
>>972
そもそもこんな関数作ってもありがたみない
2次元含めて多次元配列なんて滅多に必要ないし生産性を下げるだけ
2次元配列を使う人って多分シートというユーザーインターフェースに気が付かないうちに束縛されてるんだろうな
素人にはインターフェースとビジネスロジック分離は難しいからね

978 :デフォルトの名無しさん:2017/02/17(金) 21:15:02.13 ID:8qknrLBg.net
>>977
ギャグかな?

979 :デフォルトの名無しさん:2017/02/17(金) 21:15:54.92 ID:57XKQRPM.net
>>977
ん、ああ。 確かにそうだ。
多次元配列は酸っぱいからな。

980 :デフォルトの名無しさん:2017/02/17(金) 21:20:54.24 ID:W6pJInKu.net
>>711
InputBox文の後に追加

On Error GoTo myError

End Subの前に、入力エラー時の回避先を追加

myError:
MsgBox "入力データの型が不正です。"

981 :デフォルトの名無しさん:2017/02/17(金) 21:27:09.14 ID:UWNS+iP1.net
>>977
素晴らしい見識をお持ちだ。
是非方法論をお伺いしたい。

982 :デフォルトの名無しさん:2017/02/17(金) 21:35:53.77 ID:BVl9fCvE.net
>>981
ごく普通にオブジェクト指向でコードを書くだけ
自然と2次元以上の配列がコードから消え去る
VBAコーダーはクラスもまともに使えない人ばかりだからわからないだろうけどね

983 :デフォルトの名無しさん:2017/02/17(金) 21:42:04.44 ID:/Ik0xHA1.net
>>982
ほほー
するとn次元配列と比較して
どういったメリットを得て
デメリットはどうなる?

ケーススタディはどうなるかな?

984 :デフォルトの名無しさん:2017/02/17(金) 21:42:55.04 ID:6fUPUfvd.net
確かにクラス使いはじめて二次元配列使うことは減ったな
最近大量のエクセルデータ扱うツールも作ってないし
配列よりコレクション使った方が取り回し良いしな
ボリュームを決めなきゃいけないリストの場合は配列使うが

985 :デフォルトの名無しさん:2017/02/17(金) 21:56:35.30 ID:BVl9fCvE.net
>>983
多次元配列という柔軟性のない使いにくいわかりにくい物理的な構造から解放されてモデリングが容易になる
優れたモデリングはプログラムの保守性や拡張性を向上するために必須って常識だよね

逆に疑問なんだがビジネスで多次元配列を多用するってどこの業界なんだ?
仕事しててもそういう話って聞かないから気になる

986 :デフォルトの名無しさん:2017/02/17(金) 21:57:21.66 ID:YWoqzdEN.net
VBAでクラス。。。
単独の便利クラスを作ったり使ったりするのはありなんだけど体系だったものを作るのは難しい。
というか使い捨てになってしまう。

複数のクラス体系に対応した共通のアルゴリズムというのを事前に構築することができないんだよ。

987 :デフォルトの名無しさん:2017/02/17(金) 22:00:32.92 ID:57XKQRPM.net
>>985
配列は抽象度が低い←わかる

だがクラスオブジェクトの配列じゃ縦横に可変長という構造は作れない

988 :デフォルトの名無しさん:2017/02/17(金) 22:01:19.36 ID:Q0oePE6a.net
Variantoの話には飽きて今度はまたまたおなじみのクラスがどうたらこうたらで続ける気か

989 :デフォルトの名無しさん:2017/02/17(金) 22:03:31.40 ID:DzGsmJeY.net
>>987
二次元可変配列が必要となる状況が想像できない

990 :デフォルトの名無しさん:2017/02/17(金) 22:09:04.09 ID:8qknrLBg.net
二次元配列をグラフィカルに表現するソフト上で走る為のコードを書くExcel VBAを取り扱うスレッドで、
「二次元配列なんかいらねぇ!」って言い出すくらいなら、適切な開発環境の選定をもうちょっと真面目にやるべきだと思う。

991 :デフォルトの名無しさん:2017/02/17(金) 22:11:59.19 ID:BVl9fCvE.net
>>987
それは錯覚だな
例えばスパース行列とかはインターフェースはまるで2次元配列のようだけど中身は全然2次元配列じゃないクラスだよね
もちろん多次元配列っぽいインターフェースがそもそも必要になることは少ないが

992 :デフォルトの名無しさん:2017/02/17(金) 22:21:00.23 ID:57XKQRPM.net
そもそも配列とクラスじゃ直交してて選択する話じゃないな。
Dim arr() As Object
ReDim arr(0 To m , 0 To n)
ってできるんだし。

993 :デフォルトの名無しさん:2017/02/17(金) 22:21:15.87 ID:BVl9fCvE.net
>>990
これがまさにスプレッドシートというユーザーインターフェースに束縛された状態
なるほど、確かにユーザーインターフェースはスプレッドシートだし、ぼんやり眺めるとバリアントの2次元配列のように見える
しかしながら、内部的な処理まで2次元配列で行う必要は本当にあるのだろうか
2次元配列のわかりにくいコードを書くよりも、型安全でオブジェクティブな構造に変換してから、手強いビジネスロジックに立ち向かったほうが、健全なコーディングができそうだ、とは思わないのだろうか

994 :デフォルトの名無しさん:2017/02/17(金) 22:28:03.46 ID:8qknrLBg.net
>>993
処理結果をセルに保存しないならエクセルで処理する理由がないし、
セル一つ一つにアクセスして結果を保存してるならただの馬鹿なんだけど。

それとも最終的に二次元配列に加工する場合でも、
中間段階では二次元配列を使わないから「めったに使わない」と表現してるんだろうか。

995 :デフォルトの名無しさん:2017/02/17(金) 22:29:19.82 ID:57XKQRPM.net
>>993
オブジェクトの1次元配列は作らないのか?
そこから条件に合致したオブジェクトを探すという操作は発生しないのか?
そのとき>>972のような関数がそのまま使えたら便利だとは思わないか?
(= で比較可能ってのはダメだが)

996 :デフォルトの名無しさん:2017/02/17(金) 22:37:51.46 ID:/Ik0xHA1.net
>>995
長さnのn次元配列
意味が分からん。
なんの長さよ

997 :デフォルトの名無しさん:2017/02/17(金) 22:44:58.32 ID:BVl9fCvE.net
>>994
セルに保存するだけしかしてないならそれこそ勿体無い馬鹿

それは遅いから配列取り出して書き込めってことか?

滅多に使わんというのはそういうことだよ
シートとの境界では仕方なく使うことはあるけど、そうじゃなきゃ滅多に使わんし、使う理由もない

998 :デフォルトの名無しさん:2017/02/17(金) 22:49:38.85 ID:57XKQRPM.net
>>996
>>972のことか?
返り値だ。
N次元配列からのサーチ結果はターゲットが見つかったとしたら
(x1, x2, ..., xn)
という長さNの1次元配列になるということだ。
つまりインデックス長だ。

999 :デフォルトの名無しさん:2017/02/17(金) 22:50:36.99 ID:AYehqi+e.net
以上

1000 :デフォルトの名無しさん:2017/02/17(金) 22:50:55.49 ID:AYehqi+e.net
variantを使えないバカ達でした

総レス数 1000
304 KB
掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★