Excel VBA 質問スレ Part38 [転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2015/09/07(月) 18:59:39.00ID:E2JS6OsF___
___ /____ヽ ____
/____\ | |´・ω・`| | /___ヽ
.l |´・ω・`| ニX二 . ̄ ̄ ̄ 二X二 |´・ω・`| l 俺たちに任せろ
!、 ̄ ̄ ̄ ヽ | | /  ̄ ̄ ̄/
ヽ_/ヽ、 ヽ__) \__/\_/. /_/ ノヽ_/
 ̄  ̄ ̄
このスレはコード書き込みOKです。
作成依頼もOKですが、作成依頼限定ではありません。
コードが嫌な人・作成依頼が嫌な人は別スレ建ててください。
※前スレ
Excel VBA 質問スレ Part37 [転載禁止]2ch.net
http://peace.2ch.net/test/read.cgi/tech/1420841190/
0002デフォルトの名無しさん
2015/09/07(月) 19:05:13.76ID:E2JS6OsFhttp://peace.2ch.net/test/read.cgi/tech/1441619979/l50
0003デフォルトの名無しさん
2015/09/07(月) 19:07:12.91ID:E2JS6OsF作成依頼が嫌な人のスレはこっちです
Excel VBA 質問スレ Part37 [転載禁止]2ch.net
http://peace.2ch.net/test/read.cgi/tech/1433920729/
0004デフォルトの名無しさん
2015/09/08(火) 05:06:31.84ID:/+iyKv2WSub Sample3()
With CreateObject("Wscript.Shell")
.Run "C:\Data\Image.JPG", 5
End With
End Sub
の
.Run "C:\Data\Image.JPG", 5
の
, 5
は
一体何を意味するのでしょうか?
0005デフォルトの名無しさん
2015/09/08(火) 05:25:02.69ID:O1XLnjV5この辺の話のことか?
http://www.happy2-island.com/vbs/cafe02/capter00110.shtml
0006デフォルトの名無しさん
2015/09/08(火) 05:45:49.03ID:/+iyKv2Wはい引数5とは何を意味するのでしょうか?
0007デフォルトの名無しさん
2015/09/08(火) 06:07:52.96ID:sMbWt4zdhttps://msdn.microsoft.com/ja-jp/library/cc364421.aspx
0008デフォルトの名無しさん
2015/09/08(火) 12:22:34.20ID:NVN8kZyV0009デフォルトの名無しさん
2015/09/08(火) 23:24:02.41ID:fPKzpPbSありがとうございました。
>>5
この解説が5のみを飛ばしているので本当に悩みました。。
0010デフォルトの名無しさん
2015/09/08(火) 23:25:38.02ID:fPKzpPbS既に実装済みなので、口の中まで入ってましたw
0011デフォルトの名無しさん
2015/09/09(水) 02:39:57.70ID:ectLRYRT0012デフォルトの名無しさん
2015/09/09(水) 03:19:16.57ID:uHaCyZBlファイルの日付を取得する
http://www.happy2-island.com/vbs/cafe02/capter01102.shtml
0013デフォルトの名無しさん
2015/09/09(水) 18:16:27.23ID:ectLRYRTそれはしってて、出来るのかどうか知りたい
ところで、fso関連でいうと、ファイル名の取得させると、動いてるんだけど、Excelが固まって、他のブックに切り替えもできないんだけど、回避方法ってあるかな?
0014デフォルトの名無しさん
2015/09/09(水) 20:31:37.11ID:whASp/iz窓のファイル日付は作成/更新/参照の3種類があってWin32APIのGet/SetFileTimeで全部参照と変更可
それとファイル関係の操作は全部直接Win3APIでやるのがお勧め
0015デフォルトの名無しさん
2015/09/09(水) 20:33:23.41ID:k4ZkuMcUたぶんループ処理中の事だと思うけどDoEvents入れれば処理中でもシート弄れる。
そういやループ処理中は破棄した変数が解放されずにたまるから重くなるとかいう記事を見たんだけど、
ループ処理させずにループ処理と同じ事させる方法ってあんのかな。
0016デフォルトの名無しさん
2015/09/09(水) 20:40:05.38ID:ectLRYRTdoeventいれたら、本来の処理はとまっちゃうんでしょ?
0017デフォルトの名無しさん
2015/09/09(水) 21:04:33.91ID:k4ZkuMcUそれはStopだな。
0018デフォルトの名無しさん
2015/09/09(水) 21:50:30.24ID:eA9RoHxO0019デフォルトの名無しさん
2015/09/09(水) 21:57:22.44ID:xwZ52Y1A0020デフォルトの名無しさん
2015/09/09(水) 22:28:44.94ID:RVc7QyxG0021デフォルトの名無しさん
2015/09/09(水) 23:46:50.75ID:ectLRYRT深いこといいたいの?
0022デフォルトの名無しさん
2015/09/09(水) 23:57:22.72ID:jmO3TJP8風のようにそっと
0023デフォルトの名無しさん
2015/09/10(木) 07:54:04.30ID:c+ohyq4uふりむくな安室
0024デフォルトの名無しさん
2015/09/10(木) 19:35:14.64ID:wN8JFJBW0025デフォルトの名無しさん
2015/09/10(木) 20:03:34.12ID:0qqo7x+80026デフォルトの名無しさん
2015/09/10(木) 20:07:40.52ID:tchTbgrv0027デフォルトの名無しさん
2015/09/10(木) 20:17:47.68ID:8yg+xC410028デフォルトの名無しさん
2015/09/10(木) 22:28:54.26ID:+NpM52Lz君は ねらわれている
ふりむくな ふりむくな ふりむくな
地球を侵す者たちに 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
0029デフォルトの名無しさん
2015/09/11(金) 12:42:07.22ID:H41I+Dftあまり深掘りしている情報も見つからず、使えるのか使えないのかもよくわからない。
0030デフォルトの名無しさん
2015/09/11(金) 14:17:28.05ID:UJrMjXn02016年であれば「専務」
って言う式をお願いします。
003130
2015/09/11(金) 14:21:13.56ID:UJrMjXn00032デフォルトの名無しさん
2015/09/11(金) 14:46:29.03ID:LOwfnHUO0033デフォルトの名無しさん
2015/09/11(金) 14:47:09.01ID:LOwfnHUO…って、どこだw
0034デフォルトの名無しさん
2015/09/11(金) 20:36:34.16ID:EmY3jWzK0035デフォルトの名無しさん
2015/09/11(金) 20:44:59.84ID:2kUpW7Kd管理者ユーザーならもちろん変えられるが、VBAと何の関係が?
0036デフォルトの名無しさん
2015/09/11(金) 21:27:30.56ID:z1o7I+D1降格かよ
0037デフォルトの名無しさん
2015/09/11(金) 21:38:06.86ID:EmY3jWzKどのように書くんですか?icacls
0038デフォルトの名無しさん
2015/09/12(土) 15:37:15.80ID:PSC5C/npRange("A1:E8").Select
Selection.Find(What:=Application.WorksheetFunction.Max(Selection)).Select
こんな文を見つけたのですが、
オブジェクト変数またはwithブロック変数が設定されていません と出ます
0039デフォルトの名無しさん
2015/09/12(土) 16:16:29.83ID:KrhE9tL1Function SelectionMax()
Sel = Selection.Value
For Each x In Sel
If M < x Then M = x
Next
SelectionMax = M
End Function
0040デフォルトの名無しさん
2015/09/12(土) 17:02:30.82ID:h9KeNJ6oRange("A1:E8")になんか値が入ってないとエラーがでるみたいよ
0041デフォルトの名無しさん
2015/09/12(土) 20:37:06.04ID:GDHibxma参照設定でexcelobjectがないとかなんとか
0042デフォルトの名無しさん
2015/09/13(日) 00:25:42.27ID:f7snMU36ここで変数やFor文を使えるようにできませんか?
0043デフォルトの名無しさん
2015/09/13(日) 01:29:34.87ID:j8lACS4K変数は定義できないだけで使えるけど?
複数の行にまたげないだけで、For文も使えるけど?
For i=1 to 10:Print i:Next
たとえばこんなの入力してみ
0044デフォルトの名無しさん
2015/09/13(日) 09:21:02.53ID:Jm5r3jb9ActiveXに変更できないでしょうか?
'==================================================================================
Sub main()
Dim mkrng As Range
Dim lnkrng As Range
Dim crng As Range
Dim mcell() As Variant
Dim g0 As Long
Dim retcode As Long
Set mkrng = get_sctrng("チェックボックスを作成するセル範囲を選択してください")
If Not mkrng Is Nothing Then
Set lnkrng = get_sctrng("対応するリンクセル範囲を選択してください")
If Not lnkrng Is Nothing Then
g0 = 1
For Each crng In mkrng
With mkrng.Parent.CheckBoxes.Add(crng.Left, _
crng.Top, _
crng.Width, _
crng.Height)
.LinkedCell = lnkrng.Cells(g0).Address(, , , True)
If g0 < lnkrng.Count Then g0 = g0 + 1
End With
Next
End If
End If
End Sub
'==================================================================================
0045デフォルトの名無しさん
2015/09/13(日) 09:21:55.18ID:Jm5r3jb9Function get_sctrng(Optional mes As String, Optional mxact As Long = 1) As Range
Dim rng As Range
Dim retcode As Long
On Error Resume Next
retcode = 1
Set get_sctrng = Nothing
Do Until retcode = 0
Set rng = Application.InputBox(mes, , , , , , , 8)
If Err.Number = 0 Then
If rng.Areas.Count <= mxact Then
Set get_sctrng = rng
retcode = 0
End If
Else
retcode = 0
End If
Loop
On Error GoTo 0
End Function
お願いいたします。
0046デフォルトの名無しさん
2015/09/13(日) 16:02:54.39ID:aOKPcKZx以下のコードが記録されたけども
Sub Macro1()
'
' Macro1 Macro
'
'
ActiveSheet.OLEObjects.Add(ClassType:="Forms.CheckBox.1", Link:=False, _
DisplayAsIcon:=False, Left:=56.25, Top:=14.25, Width:=107.25, Height _
=18).Select
End Sub
0047デフォルトの名無しさん
2015/09/13(日) 16:27:02.23ID:HYANgCcSCOBOLを30年前にしていました。5年やって結婚退職しました。その後はプログラミングを一切やっていません
子供が大きくなったので事務のパートに行くことにしました。
昔プログラマーだったことを話すと、「VBAできるでしょ、この処理をマクロにして」と上司に言われました。
COBOLしかしていませんが、VBAをすぐに使えるようになるでしょうか?
このパートで首になったら、年齢的に清掃か介護の仕事しかありません。
参考書は大村あつし「かんたんプログラミング」を買いました、が
COBOLでいうところの「OPEN INPUTFILE」処理とかMOVE、WRITEが無いのでつまずいています。
0048デフォルトの名無しさん
2015/09/13(日) 18:09:34.89ID:wPz1MVxWCOBOLの基礎概念を全て捨ててまっさらな脳で取り組んだ方が習得が早いと思いますよ
人に話すときには元プログラマーというと誤解されるのでにコポラーと言った方がいいです
0049デフォルトの名無しさん
2015/09/13(日) 18:54:11.43ID:nhNM0pAX何も知らなくてもマクロの記録で適当に組み合わせれば即動く物ができるし
30年ブランクだとマクロよりExcelとかのOfficeの使い方の方が戸惑うんじゃないの
0050デフォルトの名無しさん
2015/09/13(日) 20:27:24.18ID:8cqOMIq7あとは
・変数 = Range(...)でセルの内容を取り込む
・Range(...) = 変数で二次元配列の内容をセルに反映させる
っていうの覚えとけば後はIfとかForくらいしか使わないから楽
0051デフォルトの名無しさん
2015/09/13(日) 22:34:33.36ID:3BsRFwaLC/C++、スクリプト言語まで、
10言語ぐらいプログラミングできるけど、
COBOLだけは理解不能だな
ハローワークでも、COBOLの募集はあるけど、
簡単に学べる本がない
0052デフォルトの名無しさん
2015/09/13(日) 23:22:12.44ID:nQBKdNbg005347
2015/09/13(日) 23:36:39.56ID:HYANgCcS本のサンプルを見てるうちに
RANGE("A1" ).VALUE =
みたいにコーティングすれば、MOVE,WRITEが一度にできるとわかりました。
分岐とループはわかるのでなんとかできそうです。
VBAは独習用の参考書がたくさんあるのでいいですね。
COBOLは会社での徒弟制度でお師匠様(女性)から習いました。
0054デフォルトの名無しさん
2015/09/13(日) 23:40:12.52ID:nJtJzwJH私もメインフレームでCOBOLやっていて、ツール作りにVBAをやっていから。
0055デフォルトの名無しさん
2015/09/14(月) 16:14:06.84ID:m92hyV44VBEの使い方をマスターすれば問題ないと思う
やりたい事を検索すれば参考になるコードはすぐ見れるから
デバッグを効率よくするためにVBEに早くなれて下さい
0056デフォルトの名無しさん
2015/09/14(月) 18:35:12.98ID:KuhWma5+PCがネットに繋がってないんでオフラインで使える
Excel 2013 Developer Documentation.chm
てのをダウンロードしたんだけど、英語版なのはまだ良いとして
肝心のヘルプとしての機能がちゃんとしてないのか
関数のパラメータとか調べたくてもそれが出てこない
例えばFormatで使える書式をみたくてFormatで検索しても
あんまり関係ない情報ばかりが出てきて、欲しい情報は見つからない
しょうがないから自前のスマホでネット検索して調べてるんだけど
古い機種なんで画面小さくて見辛いんで仕事が捗らないこと甚だしい
これってどうしたらいいの?
もうちょっとまともなオフラインのヘルプファイルってないのかな?
0057デフォルトの名無しさん
2015/09/14(月) 21:38:55.02ID:EGWtHR3Q0058デフォルトの名無しさん
2015/09/14(月) 22:12:07.98ID:pXK5pJDJオフラインどころかオンラインでもまともなものはない
逆引系の本買いなさい
技術者たるもの知識集めに金を惜しんではならない
0059デフォルトの名無しさん
2015/09/14(月) 22:37:26.37ID:KuhWma5+iPad持ってない
というかApple製品は何も持ってない
iTunesすらダウンロードしてない
Apple製品って物自体は良い製品なんだろうとは思うんだけど
やたらユーザーを支配したがるというか囲い込みたがる姿勢が嫌いなんだよね
MSも段々その傾向が出てきてて嫌な雰囲気だけど……
>>58
>オフラインどころかオンラインでもまともなものはない
マジか……orz
2010までは割とヘルプみながらで作れたんだけどなぁ……
0060デフォルトの名無しさん
2015/09/15(火) 22:19:24.42ID:KQEQzEy1ネットにつながってないと「ページが表示できません」になる
オフラインのヘルプが欲しかったら、それだけのために2010あたりをインストールするしかないのかも?
0061デフォルトの名無しさん
2015/09/15(火) 23:18:02.10ID:wIsrso68ゲーム作ろうと思ってるんだけど
なぜかGetAsyncKeyStateがうまく作動しない・・・
標準モジュールで
Declare PtrSafe Function GetAsyncKeyState Lib "User32.dll" (ByVal vKey As Long) As LongLong
て宣言しているんだが
実行してみると
なぜかずっとそのキーが押された状態になってるんだ。
GetAsyncKeyState(37)'左
GetAsyncKeyState(38)'上
GetAsyncKeyState(39)'右
GetAsyncKeyState(40)'下
のキーはもちろん、ほかのキーもほとんどだめ
とおもったら
GetAsyncKeyState(17)'ctrl
GetAsyncKeyState(18)'alt
とかは正常に作動する(とはいっても安定しないが)
なんでなんだろう
だれか教えてくれちょ
0062デフォルトの名無しさん
2015/09/15(火) 23:50:30.65ID:KQEQzEy1押されたかどうかをどうやって判断してんのか、その部分のコード晒して
0063デフォルトの名無しさん
2015/09/16(水) 00:25:03.03ID:rMn0Czewほぼとあるサイトのサンプルままなんだが
Sub test4()
Dim i As Long
Dim x As Long
Dim y As Long
Dim n As Long
Dim objChar(1 To 8) As Range
Dim IngPtn As Long
Dim rightflg As Boolean
Dim leftflg As Boolean
Dim upflg As Boolean
Dim downflg As Boolean
'パターン番号の制御用 最初は1
IngPtn = 1
'キャラの初期位置
x = 1
y = 1
'キャラの形
Set objChar(1) = Range(Cells(1, 1), Cells(15, 15))
Set objChar(2) = Range(Cells(1, 16), Cells(15, 30))
Set objChar(3) = Range(Cells(16, 1), Cells(30, 15))
Set objChar(4) = Range(Cells(16, 16), Cells(30, 30))
Set objChar(5) = Range(Cells(31, 1), Cells(45, 15))
Set objChar(6) = Range(Cells(31, 16), Cells(45, 30))
Set objChar(7) = Range(Cells(46, 1), Cells(60, 15))
Set objChar(8) = Range(Cells(46, 16), Cells(60, 30))
rightflg = True
leftflg = False
upflg = False
downflg = False
ナガイからわける
0064デフォルトの名無しさん
2015/09/16(水) 00:28:44.51ID:rMn0Czew'左
If GetAsyncKeyState(37) <> 0 Then
x = x - 1
leftflg = True
rightflg = False
upflg = False
downflg = False
'左端のときはそれ以上左に行かない
If x < 1 Then
x = 1
End If
End If
'右
If GetAsyncKeyState(39) <> 0 Then
x = x + 1
rightflg = True
leftflg = False
upflg = False
downflg = False
'右端のときはそれ以上右に行かない
If x > 500 Then
x = 500
End If
End If
0065デフォルトの名無しさん
2015/09/16(水) 00:29:34.16ID:rMn0CzewIf GetAsyncKeyState(38) <> 0 Then
y = y - 1
rightflg = False
leftflg = False
upflg = True
downflg = False
'上端のときはそれ以上上に行かない
If y < -50 Then
y = -50
End If
End If
'下
If GetAsyncKeyState(40) <> 0 Then
y = y + 1
rightflg = False
leftflg = False
upflg = False
downflg = True
'下端のときはそれ以上下に行かない
If y > 500 Then
y = 500
End If
End If
0066デフォルトの名無しさん
2015/09/16(水) 00:30:34.16ID:rMn0CzewobjChar(IngPtn).Copy _
Destination:=Range(Cells(150 + y, x), Cells(100 + y, x + 15))
'パターン番号の変更です 1,2,1,2…を繰り返します
IngPtn = IngPtn + 1
If rightflg = True And IngPtn >= 3 Then
IngPtn = 1
End If
If leftflg = True And IngPtn >= 5 Then
IngPtn = 3
End If
If downflg = True And IngPtn >= 7 Then
IngPtn = 5
End If
If upflg = True And IngPtn >= 9 Then
IngPtn = 7
End If
'時間稼ぎのループです
For j = 1 To 3000: DoEvents: Next
Loop
End Sub
確認方法は
GetAsyncKeyStateをコメントアウトしたり、引数を(17)とかにしたら正常に動くことからして判断
ちなみにずっと押されていると思われる→キーとかは引数としてではなく、普通に使う分にはなんも問題がないから
キーボードに問題があるとかではないと思う
0067デフォルトの名無しさん
2015/09/16(水) 00:39:19.36ID:j2/nQOKDおかしい部分が2個所ある
1つ目、GetAsyncKeyStateの戻り値はintだから
Declare PtrSafe Function GetAsyncKeyState Lib "User32.dll" (ByVal vKey As Long) As Integer
としないといけない
2つ目、GetAsyncKeyStateで単純に押されたかどうかだけを調べたい時はMSBだけをチェックする
If GetAsyncKeyState(37) And &h8000 <> 0 Then
ネットを見ると、同じように間違ってるサンプルがいくつもあるから注意すべし
とこにWin32APIを使う時は、まずはMSDNを当たること
https://msdn.microsoft.com/ja-jp/library/cc364583.aspx
0068デフォルトの名無しさん
2015/09/16(水) 01:10:16.98ID:rMn0Czewおおいけた!!!
知恵袋で聞いてもできなかったのに
さんくす!!!
0069デフォルトの名無しさん
2015/09/16(水) 01:25:56.15ID:vIYm92da0070デフォルトの名無しさん
2015/09/16(水) 01:47:25.86ID:Cx9YrWpB0071デフォルトの名無しさん
2015/09/16(水) 02:28:05.78ID:9fL6Ueyi0072デフォルトの名無しさん
2015/09/16(水) 12:24:37.69ID:9lfWhZ9r0073デフォルトの名無しさん
2015/09/16(水) 12:28:57.22ID:MQ6WnVci0074デフォルトの名無しさん
2015/09/16(水) 15:09:32.12ID:zUxOp5EfだからIntegerで受けるのはあってると思う
0075デフォルトの名無しさん
2015/09/17(木) 20:40:42.90ID:7HP4sLLYものすごい低レベルな質問で恐縮なんだけど
>>64の1行目にある
Do Until False
って、何でこういう書き方してるの?
ただ単に Do だけでも変わらないって事はないの?
0076デフォルトの名無しさん
2015/09/17(木) 21:56:36.75ID:0bI43UuxDoだけでも同じ動作はする
実際の理由は書いた奴に聞かんとわからんが
Doだけだと、Loop側に条件書いてる可能性があるから
前判定で明示的に無限ループさせてる事を解りやすくする為だろうな
0077デフォルトの名無しさん
2015/09/18(金) 00:26:17.93ID:k7q6/Xtnどうもありがとう
なるほど、やっぱり論理判定上の意味合いはなかったんだね
もしかして俺の知らないような特殊な構文があるのかと思ってたよ
0078デフォルトの名無しさん
2015/09/18(金) 00:29:54.32ID:cBOk0nK1本来の条件をコメントアウトしてるだけだろう
007975
2015/09/18(金) 05:58:20.79ID:k7q6/Xtnそれはつまり
Do Until Hoge = False
だとか書いてあったところを
Do Until False
にしたんだろうってこと?
そんな中途半端な端折り方するかなぁ?
ここでさらすために関係ないところを消したのなら、
普通だったら Do だけにすると思うよ
もしくは、デバッグ時の一時的な措置としてなら条件部分は消さないで
Do の後ろを’でコメントアウトさせるとかするよね
まぁ、仮にどういう理由での端折り方だったとしても
Do とDo Until False でコードとしての挙動が変わらないなら
>>75での疑問への答えには関係ないことだけど
0080デフォルトの名無しさん
2015/09/18(金) 06:03:01.62ID:/9LiLA2gC++でゲーム作る時は Do{...}While(1) とかやるし。
0081デフォルトの名無しさん
2015/09/18(金) 08:10:17.90ID:vvwUaO7x> Do{...}While(1) とかやるし。
for( ; ; ){ ... } だろ
そもそも C++ はすべて小文字だし
0082デフォルトの名無しさん
2015/09/18(金) 12:04:15.66ID:kHPw/fq6do while true
っていつも書いてる。
誰かが書いてるのを流用して覚えたのかな、わからんわ。
0083デフォルトの名無しさん
2015/09/18(金) 15:42:42.50ID:TFTTQabPVBAでいったい何作ってんだよ
0084デフォルトの名無しさん
2015/09/18(金) 16:30:22.86ID:+Yui8Vmg>>61
>ゲーム作ろうと思ってるんだけど
まあ、VBAが向いてるとは思わんが
0085デフォルトの名無しさん
2015/09/18(金) 17:37:12.00ID:F1j6zTfgこういうのありがちかもと思った。
Do While True
buf = getData()
If buf = "" Then
Exit Do
End If
doSomething buf
Loop
0086デフォルトの名無しさん
2015/09/18(金) 17:39:38.80ID:RwvEkWDv採番処理のリトライとか
0087デフォルトの名無しさん
2015/09/18(金) 18:48:13.04ID:fLNXHY+lそういう場合はgetData()の中でループしてデータが入ってくるまで待つように作った方がいいんじゃないか?
さもなくばデータの有無を取得するためのメソッドかプロパティか変数を用意するのが筋だと思うんだが
無限ループで待つのはあんまりいい実装じゃ無いと思う
0088デフォルトの名無しさん
2015/09/18(金) 20:00:01.78ID:WxafZwof人のコードを見たら脊椎反射で添削するのやめろよ
荒れる元だ
添削は頼まれた時だけにしろ
0089デフォルトの名無しさん
2015/09/18(金) 20:13:59.39ID:h/Y8JD3x3と4と8だったら、3と4の平均値で3.5
5と8と9だったら、8と9の平均値で8.5
の様に、三つの数字のうち近い二つの平均値を出す場合、どういう処理が一番スマートでしょうか?
自分が思いつくのが
@3つのうち2つの数字の選んで差を出す
Aそれを全部比較
Bそれをifで処理する…
我ながらかっこわるい処理だと思ってます
もっと簡単にできないでしょうか?
0090デフォルトの名無しさん
2015/09/18(金) 20:52:02.69ID:EolSINtJそれでいいんじゃね?
自分だったら 数値を配列にいれてFORループ処理するにゃ
(やる事は基本 >>89と同じだけど)
あと すべて同差だったらどうするの?
0091デフォルトの名無しさん
2015/09/18(金) 22:10:16.34ID:/9LiLA2gDim lAbs(), index As Long
For i = 0 To UBound(arg)
For j = 0 To UBound(arg)
If i <> j Then
ReDim Preserve lAbs(1, index)
lAbs(0, index) = Abs(arg(i) - arg(j))
lAbs(1, index) = (arg(i) + arg(j)) / 2
index = index + 1
End If
Next
Next
If index Then
h = lAbs(0, 0)
ans = lAbs(1, 0)
For i = 0 To index - 1
If h > lAbs(0, i) Then h = lAbs(0, i): ans = lAbs(1, i)
Next
End If
NearAverage = ans
End Function
俺もこんな方法しか思い浮かばないわ。他に解があるのかな。
>>81
実際に作ろうとするとWhileの部分には終了用のフラグとか入るからFor文は無いんじゃないか。
あと全部小文字ってので昔は「VBAは頭文字が大文字になるからかっこ悪いなぁ」とか思ってた時期があった事を思い出した。
まぁ後はゲーム製作スレとかでやる話だな。
0092デフォルトの名無しさん
2015/09/18(金) 22:18:51.55ID:+Yui8Vmg>Whileの部分には終了用のフラグとか入るから
明示的に無限ループさせるって話だったはずなんだが
forの無限ループも他言語ならそこそこ見る定形処理
0093デフォルトの名無しさん
2015/09/18(金) 22:24:50.90ID:+Yui8Vmg要素が三つしかなくてソートされてるなら、1−2番目か2−3番目かしかないから
それぞれの差とって比較して、小さいほうの平均取ればいいんじゃね
ソートされてないなら、ソートしてもいいけど、三つぐらいなら総当たりでもいいか
0094デフォルトの名無しさん
2015/09/19(土) 00:49:55.88ID:qwiT5joB0095デフォルトの名無しさん
2015/09/19(土) 03:20:58.94ID:ZcnBR6n/手抜きだから同差だと答えが出ない
元データA1〜A3 → 狭い方の平均x
s1 = Abs(A1 - A2)
s2 = Abs(A1 - A3)
s3 = Abs(A2 - A3)
If s1 < s2 And s1 < s3 Then x = (A1 + A2) / 2
If s2 < s1 And s2 < s3 Then x = (A1 + A3) / 2
If s3 < s1 And s3 < s2 Then x = (A2 + A3) / 2
0096デフォルトの名無しさん
2015/09/19(土) 08:02:54.18ID:U6It5g+sこれは近い値の集合を得る処理と平均値を取る処理の2つに分けて考えるべき
一緒くたにして複雑にすることはない
>>95みたいな物を書いた後仕様変更で3つが4つ5つに増えていったらどうするの
0097デフォルトの名無しさん
2015/09/19(土) 09:12:51.40ID:xryWHhpW> 一緒くたにして複雑にすることはない
そんなことしてる奴はいないけど?
0098デフォルトの名無しさん
2015/09/19(土) 09:49:54.54ID:zNER9jB5>>91
0099デフォルトの名無しさん
2015/09/19(土) 09:58:07.05ID:x1zzYklZindexとか配列とかなくした
Dim h, i As Long, j As Long
If UBound(arg) > 0 Then
h = Abs(arg(0) - arg(1))
NearAverage = (arg(0) + arg(1)) / 2
For i = 0 To UBound(arg) - 1
For j = i + 1 To UBound(arg)
If h > Abs(arg(i) - arg(j)) Then
h = Abs(arg(i) - arg(j))
NearAverage = (arg(i) + arg(j)) / 2
End If
Next j
Next i
End If
0100デフォルトの名無しさん
2015/09/19(土) 10:51:53.04ID:zNER9jB5そういや捨てるならスタックする必要無かったわな。
0101デフォルトの名無しさん
2015/09/19(土) 11:01:51.71ID:GIof26cq増えそうなら初めから3つとか言う限定した仕様で作らんわ
■ このスレッドは過去ログ倉庫に格納されています