Excel VBA 質問スレ Part45 [無断転載禁止]©5ch.io
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2017/01/03(火) 02:51:16.56ID:9Y8iTik6コード書き込みや作成依頼も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/
0002デフォルトの名無しさん
2017/01/04(水) 23:43:25.46ID:T2t87YWx0003デフォルトの名無しさん
2017/01/05(木) 01:36:19.20ID:3zitFiAl0004デフォルトの名無しさん
2017/01/05(木) 16:31:19.34ID:rordfoes0005デフォルトの名無しさん
2017/01/05(木) 17:49:33.10ID:3kVSXnTBOffice TANAKA
0006デフォルトの名無しさん
2017/01/05(木) 19:15:59.64ID:YlAAgZIP0007デフォルトの名無しさん
2017/01/05(木) 21:50:17.01ID:PrUsv/Joマクロ実行中も再計算してるのか
0008デフォルトの名無しさん
2017/01/05(木) 21:53:00.56ID:EGC2o4Lu計算止めてマクロ実行し終わるときに再計算させるんじゃダメなの?
0009デフォルトの名無しさん
2017/01/05(木) 22:36:04.40ID:fbqYOVILMe.Thread
0010デフォルトの名無しさん
2017/01/05(木) 22:50:47.05ID:olwzS93J0011デフォルトの名無しさん
2017/01/05(木) 23:06:24.30ID:fbqYOVIL半分くらいは、神エクセルを作るクソ上司対策の為にあるようなもんだけどな。
0012デフォルトの名無しさん
2017/01/06(金) 00:22:50.70ID:m+Jpe1FL作り終わったら描画と計算止めるのは速度上げたいならマストだぞ
0013デフォルトの名無しさん
2017/01/06(金) 00:32:13.04ID:yTw61UwJレベルによると思います。
マクロ少しはつかえるのか、全くダメだけどExcelは得意(関数、機能など)だとか、関数もよく分からんとか。
IF関数もよく分からないレベルだと、まずはExcelの関数(ワークシート関数)と、機能(条件付き書式とか、テーブルとか)をある程度勉強した方がいい。
0014デフォルトの名無しさん
2017/01/06(金) 19:20:32.03ID:Eygm90s9選択している写真の存在するセル領域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
0015デフォルトの名無しさん
2017/01/06(金) 19:32:50.62ID:5HA7V59pRangeを選択してその大きさにShapeのサイズを変える
0016デフォルトの名無しさん
2017/01/06(金) 19:50:55.68ID:5HA7V59pRangeが大きくなった事を判定してRangeを小さくするとか
大きくなったRangeに合うようにShapeを移動する
例えばRangeの中心とShapeの中心が重なるようにとか
全てのShapeを同じ大きさにするとか
シートにシェイプは1つだけにしてシートの左上とシェイプの左上を合わせるとか
0017デフォルトの名無しさん
2017/01/06(金) 19:54:21.08ID:ylhkczHtスマホから、主です。
回答ありがとうございます。
たしかにこれから写真を貼るのであれば、その方法で解決すると思いますが、あくまで既に配置済みの写真から読み取る必要が有るんです。
上記はテストコードなのでセレクトしていますが、これを関数化して膨大な配置済みの写真からそれぞれのrangeを取り出すのが最終目標なので。
0018デフォルトの名無しさん
2017/01/06(金) 21:04:04.05ID:S2R5Pk4vどうせギリギリのところで次のセルに被ってるんだろ
対象のシェイプより少しだけ小さいシェイプおいて取得すりゃいいんじゃね?
0019デフォルトの名無しさん
2017/01/06(金) 21:54:38.99ID:Q5cZMFD3vbaでオラが画像を貼る時は
デフォのセルの左上を基準にするだけで
セルをはみ出そうが、画と画が被ろうが、複数枚貼っていく
その時、画像のセル位置はセーブしてるし
shapes.nameを一意に付けておくので
後でサイズ変更したり削除したり、、操作は自在なのだが
0020デフォルトの名無しさん
2017/01/06(金) 23:58:00.16ID:8yYsxO6Kマクロでvlookupを使いたいと思っているのですがエラーしか返ってこず途方にくれています。。
=VLOOKUP(D8,データ欄!$C$9:$D$28,2,FALSE)
D8にはユーザーフォームで入力した品目名が出力されており、それに呼応するIDがデータ欄!C9:D28に記載されており、
E8にIDを出力したいと考えています。
ヒントでも頂ければ幸甚に存じます。
0021デフォルトの名無しさん
2017/01/07(土) 00:25:21.43ID:LrFag0bmvlookup関数でエラーが出てるの?
0022デフォルトの名無しさん
2017/01/07(土) 00:30:28.46ID:2J+LIFNT途中でエラーが出て、アレっ?となる罠付きだけどな。
0023デフォルトの名無しさん
2017/01/07(土) 00:37:52.01ID:2J+LIFNTCells(1,1).Value="=VLOOKUP(D8,データ欄!$C$9:$D$28,2,FALSE)"なのか?
WorksheetFunction.VLookupなのか?
実行時エラーなのか?
#N/Aなのか?
何となく、余計な改行コードが入っているとか、
数字の123と文字の123を比較してるとか、
そんな罠のような気がするけど。
0024デフォルトの名無しさん
2017/01/07(土) 00:48:37.10ID:CI9p857v面倒くさいからこれ貼っとくわ
http://www.relief.jp/itnote/archives/excel-vba-error-trap-vlookup-function.php
0025デフォルトの名無しさん
2017/01/07(土) 00:49:41.86ID:TOrGuStJ事実だけを伝えた方がいい時もある
エラーと言っているが画面に表示される文字列やダイアログは何なのか
どんなタイミングで表示されるのか
自分が書いたコードはどんなものか
0026デフォルトの名無しさん
2017/01/07(土) 00:51:23.73ID:LrFag0bm0027デフォルトの名無しさん
2017/01/07(土) 00:55:21.10ID:CI9p857v0028デフォルトの名無しさん
2017/01/07(土) 09:02:21.49ID:Xo1hV6SK作り終わるってのはテストも込みでだぞ
0029デフォルトの名無しさん
2017/01/07(土) 23:07:08.30ID:so7B4l6a0030デフォルトの名無しさん
2017/01/07(土) 23:55:04.69ID:5WVocSaLとあるセルに入力するとvbaが実行するようにしてるのですが
コードに間違いがあるとエラーがでて終了を押すとまたセルに入力してもvbaが実行されなくなります (MsgBoxで確認してます)
実行メニューのリセットを押しても同じです
ファイルを開き直してもダメでexcelを再起動するとまた動くのですが再起動せずにする方法ってありますか?
excel 2016 win7です
003130
2017/01/08(日) 00:49:37.29ID:r1ASQ1zZボタンからsubの実行は動くようです
0032デフォルトの名無しさん
2017/01/08(日) 00:52:16.58ID:mMTwBd0eもしかして
Application.EnableEvents = False
とかしてて その後 実行時エラーが出て Trueに戻せてないとかじゃね?
On Error
でエラートラップして Trueに戻すようにしないと
0033デフォルトの名無しさん
2017/01/08(日) 12:37:54.44ID:C9GVPqMv0034デフォルトの名無しさん
2017/01/08(日) 14:23:39.68ID:aANViJyGまさにこれだが
デバッグモードにして止めてみろって
003530
2017/01/08(日) 14:39:47.53ID:r1ASQ1zZそれが原因だったようです
ありがとうございますm(__)m
>>33-34
デバックモードよく分かってません
勉強してみます
0036デフォルトの名無しさん
2017/01/08(日) 21:58:52.89ID:LSCp0tLPA行(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
本来は「みかん」と「バナナ」をまとめて、その上に「果物」の見出しをつけたいのに、
このコードだと「みかん」と「バナナ」のそれぞれ一行上に行が入ってしまいます。
どうしたら、まとめて一行だけ挿入することが出来るでしょうか?
0037デフォルトの名無しさん
2017/01/08(日) 22:25:17.31ID:KINgQhrq俺が困るので先に言っとく
『行』とは横のことを指す(左の数字)
縦を指すときは『列』と呼ぶ(上の英字)
そこをふまえて
>B列が1行上の値と違う場合、1行上に行を挿入して、その行に「果物」と入れたい
と言う条件と
>「みかん」と「バナナ」のそれぞれ1行上に行が入ってしまいます。
と言う結果は整合性のある状態なので問題はないと思う
もしも望む結果ではないのであればまず
>B列が1行上の値と違う場合、
を見直すことが必要
やりたい内容を鑑みれば
B列に入力があり、1行上の値が空白である場合、
と変えればいいと思う
0038デフォルトの名無しさん
2017/01/08(日) 22:42:31.86ID:LSCp0tLPそうですね、表現の仕方が間違っておりました。
フォーマットがもう決まってしまっているので、これで何とかしたいんですよね・・・。
どうしても、「みかん」「バナナ」をまとめて、一行上に行を挿入したいのですが。
今、思いついたのは、「みかん」「バナナ」にそれぞれ行が入ってしまうことは承知で、
「果物_01」「果物_02」と連番になるように設定して(やり方は分かっていないです)
それで_02の行は削除するというifを組んで、
さらに「果物_01」の行は「01」の部分を省くコードを書けばいいかな、と思ったりもしますが、
効率が悪いでしょうか?(やり方は分かっていないです、ただ思いつき)
0039デフォルトの名無しさん
2017/01/08(日) 22:49:26.11ID:KINgQhrq条件を変えればいいと思う
A列(A5〜Aずっと下まで)に「食物」が入力されていると仮定して、
B列が1行上の値と違う場合、
1行上に行を挿入して、その行に「果物」と入れたい
↓
A行(A5〜Aずっと下まで)に「食物」が入力されていると仮定して、
B列に入力があり、1行上の値が空白である場合、
1行上に行を挿入して、その行に「果物」と入れたい
0040デフォルトの名無しさん
2017/01/08(日) 23:15:02.67ID:LSCp0tLPなるほど、そういう発想もありますね。
でもそうなると、どういうコードになるのでしょうか??(・・?)
0041デフォルトの名無しさん
2017/01/09(月) 00:15:41.73ID:t+szxcoeちょっと日本語が意味わからないからアドバイス出来ないわ…
0042デフォルトの名無しさん
2017/01/09(月) 00:55:08.08ID:4/AW5UycA列は全て 「食物」が入力されているのよね
で
B列にどのように入ってるの?
>B行に入る値
>・みかん
>・バナナ
これ以外は無い(すなわち空セル)って事?
コード見ると「りんご」 ってあるみたいだけど???
んで どのような結果を お望み?
0043デフォルトの名無しさん
2017/01/09(月) 00:58:47.84ID:5IQR8Haa分類1
商品1
商品2
分類2
商品3
商品4
みたいなフォーマットなの?
もしそうなら、それは神エクセルだから、
>フォーマットがもう決まってしまっているので
そこをどうにかして、こう直したほうがいいと思うけど。
分類名 商品名
分類1 商品1
分類2 商品2
0044デフォルトの名無しさん
2017/01/09(月) 01:00:35.84ID:5IQR8Haa分類名 商品名
分類1 商品1
分類1 商品2
分類2 商品3
分類2 商品4
0045デフォルトの名無しさん
2017/01/09(月) 02:56:04.77ID:JlqgPD3/コマンドボタンを1回クリックするごとにラベルに100ごと加算される物を
作りたいのですが、↓だと、あたりまえですが1度クリックしかできません。
Private Sub CommandButton1_Click()
x = 100
Label1.Caption = x
End Sub
0046デフォルトの名無しさん
2017/01/09(月) 03:13:17.25ID:4/AW5Uycコマンドボタンとラベルは ユーザフォーム上なの? シート上なの?
どちらでも良い方法として
ラベルのプロパティ開いて Captionを 0 にしておく
その上で
Private Sub CommandButton1_Click()
Label1.Caption = Label1.Caption + 100
End Sub
0047デフォルトの名無しさん
2017/01/09(月) 03:24:27.93ID:JlqgPD3/ユーザーフォーム上です!ありがとうございました、無事できました!
0048デフォルトの名無しさん
2017/01/09(月) 04:07:15.85ID:JlqgPD3/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
0049デフォルトの名無しさん
2017/01/09(月) 04:23:14.16ID:4/AW5Uyc>>46 を良く嫁
以上
0050デフォルトの名無しさん
2017/01/09(月) 10:17:57.42ID:EPA1tS/m引き算するとこのx,yの代入逆だろ
x=ラベルキャプションってしないとなんも価入らんぞ
あとちゃんと変数は宣言してる?
0051デフォルトの名無しさん
2017/01/09(月) 10:41:01.31ID:HU0Vv46x>ラベルのプロパティ開いて 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
0052デフォルトの名無しさん
2017/01/09(月) 13:48:59.41ID:O0/XMIqD一旦シート1の表の値を変数ATAI(i)に入れて、シート2や3にコピーしてます。
また別の方法で直でシート1.COPY シート2でもコピーしてみました。
両方ともコピーするのが2万個ぐらいあるのですが、処理に3分ぐらいかかります。
もっと早くする方法はありますか?
0053デフォルトの名無しさん
2017/01/09(月) 13:50:27.27ID:JSUf7hDgエラーで中断したら再計算しないけどな
0054デフォルトの名無しさん
2017/01/09(月) 14:36:04.75ID:SVvcq0NiWSだとメソッドまたはデータメンバーが見つかりませんになってしまいます
wsの方か厳密のような気がするのですがObjectで正解なんでしょうか?
ThisWorkbook
Dim ws As Worksheet ' Objectにすると成功
Set ws = Sheets("Sheet1")
Call ws.a() ' エラー
Sheet1
Sub a()
End Sub
0055デフォルトの名無しさん
2017/01/09(月) 14:36:23.83ID:EPA1tS/mDim rng as Range
set rng = Range(元データ開始セル,元データ終了セル)
Range(貼り付け先開始セル,貼り付け先終了セル) = rng
って感じでやると早くない?
もしかしたらvariant型の変数にした方が早いかもしれんけど
OfficeTANAKAに高速化テクニックって感じで載ってるよ
0056デフォルトの名無しさん
2017/01/09(月) 14:37:11.58ID:EPA1tS/mあのな?「作り終わったら」ってどういう意味かわかるか?
0057デフォルトの名無しさん
2017/01/09(月) 14:51:56.79ID:4FVlGxEy目的に合致してれば
問題ないです
0058デフォルトの名無しさん
2017/01/09(月) 15:00:52.77ID:cjVtQucRSheet1.NameがSheet1じゃないのかも
005954
2017/01/09(月) 15:30:22.93ID:SVvcq0NiWorkbook_SheetChange(ByVal ws As Object, ...
Call ws.a() ' エラー
Call Sheets(ws.Name).a() ' 成功
となり訳が分かりません...
>>57
理解できてないとなにか気持ち悪いです
>>58
同じにしてあります;;
セルやらシートがあるのでvbaってjsやpyより難しい気がします
basicの構文も癖があるし・・
0060デフォルトの名無しさん
2017/01/09(月) 16:49:38.66ID:dWF3ZE3Bwww
0061デフォルトの名無しさん
2017/01/09(月) 16:53:01.88ID:6xa3UP1L後者だと参照渡しになりませんでしたが。
0062デフォルトの名無しさん
2017/01/09(月) 16:53:39.75ID:I9s0ZByk他の人が追試出来るように端折らないコード乗せて。
0063デフォルトの名無しさん
2017/01/09(月) 16:57:16.33ID:6xa3UP1L0064デフォルトの名無しさん
2017/01/09(月) 17:21:48.98ID:EPA1tS/m解決したならそれをのせろや
0065デフォルトの名無しさん
2017/01/09(月) 17:22:57.78ID:SVvcq0Ni新規の空ファイルで
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
0066デフォルトの名無しさん
2017/01/09(月) 18:15:14.29ID:Z/GXP5pvsh.Name="Sheet1"
を確認しないとダメな気がする
0067デフォルトの名無しさん
2017/01/09(月) 18:21:35.53ID:Z/GXP5pv動的にイベントが発生するまでシートを確定できないからコンパイルでエラーになるみたいだよ
0068デフォルトの名無しさん
2017/01/09(月) 18:23:08.68ID:Z/GXP5pv0069デフォルトの名無しさん
2017/01/09(月) 18:39:16.88ID:SVvcq0Niありがとうございますm(__)m
VBAはコンパイラだったのですね
納得しました
0070デフォルトの名無しさん
2017/01/09(月) 18:56:01.43ID:jLw81RF+厳密にいうと参照渡しになっている。
変数aをカッコで囲んで(a)とすると、aのコピーが一時オブジェクトとして作られ、それがプロシージャに渡されるので、
元の変数aそのものはプロシージャに渡らない。
プロシージャ a
と
Call プロシージャ(a)
が等価で、
プロシージャ (a)
は
Call プロシージャ((a))
と等価になる
0071デフォルトの名無しさん
2017/01/09(月) 19:32:58.81ID:6xa3UP1Lカッコにそういう意味があったとは・・・!
わかりやすかったです、ありがとうございました。
0072デフォルトの名無しさん
2017/01/09(月) 22:18:09.21ID:vYvrwg8zえっ
0073デフォルトの名無しさん
2017/01/09(月) 22:32:30.71ID:o7+xqhMd分かりづらく失礼しました。
途中のりんごは不要です。
また、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
0074デフォルトの名無しさん
2017/01/09(月) 22:32:55.53ID:o7+xqhMd果物
食物バナナ
食物みかん
食物その他(仮)
・
・
・
としたいわけです。ところが、自分の作ったシートだと
果物
食物バナナ
果物
食物みかん
食物
・
・
となってしまうわけです。これで分かりやすくなったでしょうか・・・
0075デフォルトの名無しさん
2017/01/09(月) 22:40:49.82ID:LQfxW/qY0076デフォルトの名無しさん
2017/01/09(月) 22:45:04.08ID:O0/XMIqD手動でセルに関数貼りつけたほうが早かったです・・・。
0077デフォルトの名無しさん
2017/01/09(月) 23:29:23.35ID:4/AW5Uycやりたい事こんな感じ?
※なお 区別する種類が多いとこの手法は結構大変なので
考え直さないとだけど
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
0078デフォルトの名無しさん
2017/01/09(月) 23:32:51.18ID:cjVtQucRメニューにコンパイルってあるけど
0079デフォルトの名無しさん
2017/01/09(月) 23:43:50.55ID:dVuv1+muんー
二万件あっても直接レンジでやり取りすればそんな時間かからんと思うけどな
まあいいや、解決したなら乙だ
0080デフォルトの名無しさん
2017/01/09(月) 23:47:23.09ID:SFPxoHKZ本当はVBA必要ないのに、
神エクセルを作ることによって、
VBAが必要になってしまっているのではないか?
果物・・・食べ物の種類
バナナ・・・果物
みかん・・・果物
項目以外で、違うものを同じ列に入れる?
0081デフォルトの名無しさん
2017/01/10(火) 00:09:16.68ID:hjeg5IZ90082デフォルトの名無しさん
2017/01/10(火) 10:38:11.72ID:yHxqwlUe大変遅くなりました。
>「元の画像より少し小さいシェイプを作成して取得する」
はなかなかの妙案だと思いましたが、関数化してループさせた場合処理速度に問題があったので、
既存のプロパティを自力で補正するように書き換えてみました。
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
長すぎと怒られたので 次レスへ
0083デフォルトの名無しさん
2017/01/10(火) 10:38:44.28ID:yHxqwlUe'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
以上、ご報告まで。
0084デフォルトの名無しさん
2017/01/10(火) 12:02:57.55ID:yHxqwlUe以下のようなマクロがあります。
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を保持する。
ご教示のほどよろしくお願い致します。
0085デフォルトの名無しさん
2017/01/10(火) 15:45:40.53ID:8VGVrhFD君の思う スマートな方法が どんなものだかは分らんが
どこかのセルを選択するのが一番簡単だと思う
適当なセルだとスクロールしてしまうのがイヤなら
・選択されてるShapeの右上のセルを選択
・画面上の左上のセルを選択
とかでいいんじゃね?
008685
2017/01/10(火) 15:47:43.23ID:8VGVrhFD× ・選択されてるShapeの右上のセルを選択
○ ・選択されてるShapeの左上のセルを選択
0087デフォルトの名無しさん
2017/01/10(火) 17:40:05.82ID:yHxqwlUeとりあえずは、表示画面の左上セルをSelectするようにしたいと思います。
>スマートな方法
いわゆるobj.Unselect()メソッドとか、obj.Select(false)のような選択解除専用の機能は無いか。という事です。
Excel VBAって思わぬオブジェクトに実装されていたりするので・・・
0088デフォルトの名無しさん
2017/01/11(水) 08:57:05.13ID:J0hUcFsW結局は別のものを選択してるよね
0089デフォルトの名無しさん
2017/01/11(水) 09:00:21.43ID:v+irSj+yプロパティ的なもんはオブジェクトブラウザかなんかで調べれば出てくるんじゃないの
0090デフォルトの名無しさん
2017/01/11(水) 12:03:53.06ID:tc1gJPs0A1に日付が2017/01/11と入ってる場合
そのセルを引用したらスラッシュも入ってしまい保存の時にいちいち消すのに困っています。
保存の時にだけスラッシュを消す方法有りませんか?
0091デフォルトの名無しさん
2017/01/11(水) 12:12:47.07ID:p4WB0UzKformat
0092デフォルトの名無しさん
2017/01/11(水) 12:31:15.82ID:tc1gJPs0このような形でいいのでしょうか?
0093デフォルトの名無しさん
2017/01/11(水) 12:34:16.38ID:I7PY9KYrExcelVBAのマクロを保存してた「PERSONAL.XLSB」が使えなくなりました。
シンクライアントでは「PERSONAL.XLSB」に相当する機能を使用するにはどうしますか?
あとこれが本題なのですが
OutlookとWordも、それらのVBAをデフォルト的個人ファイルに保存して高頻度で使用していました。
特にOutlookのVBAでは便利なマクロを作っていました。
シンクライアントでもそれらの機能を使用するにはどうしますか?
0094デフォルトの名無しさん
2017/01/11(水) 12:35:59.27ID:p4WB0UzK0095デフォルトの名無しさん
2017/01/11(水) 12:38:17.27ID:tc1gJPs0ご丁寧にありがとうございます!
0096デフォルトの名無しさん
2017/01/11(水) 12:48:03.28ID:p4WB0UzK単純に移行すれば使えると思う
以前使ってたpersonal.xlsbを所定の位置に配置すればできるはず
0097デフォルトの名無しさん
2017/01/11(水) 12:50:26.58ID:I7PY9KYrシンクライアントでは普通の方法ではCドライブが見えないんです。
別の方法で見つけてそこに入れても、次の日にPCを起動したときにそのファイルは消えてしまっているから
わざわざファイルを移動する方法では無駄になってしまうんです。毎日する必要になるから面倒で。
0098デフォルトの名無しさん
2017/01/11(水) 12:53:38.45ID:xxQxfc5N会社のシステム担当者に聞けばいいよ
0099デフォルトの名無しさん
2017/01/11(水) 13:08:46.29ID:uU4tfKci自分なりのカスタマイズはあきらめるしかない場合がほとんど
0100デフォルトの名無しさん
2017/01/11(水) 13:08:59.59ID:I7PY9KYrどこにその部署があるかわからないし
勝手にツール作らないでくださいといわれてそれを禁止されるリスクもあるから
自分の力で解決したいのですが。
0101デフォルトの名無しさん
2017/01/11(水) 13:15:26.49ID:I7PY9KYrどうすればシンクライアントでもスタートアップ機能を使えるでしょうか?
0102デフォルトの名無しさん
2017/01/11(水) 13:37:35.00ID:f6yusNGM管理者側で許可設定してもらわない限り、シンクラでカスタマイズは無理
そして許可はまず下りない
あきらめろ
0103デフォルトの名無しさん
2017/01/11(水) 13:38:29.71ID:uU4tfKciスレチ
0104デフォルトの名無しさん
2017/01/11(水) 13:38:35.27ID:QIrTsKqr板違い Windows板かパソコン一般板かPC初心者板へ
0105デフォルトの名無しさん
2017/01/11(水) 13:45:44.75ID:1bci6XNy聞く前にやりなよそのくらいって思うんだが
1から10まで聞かないとなにもできないの?
0106デフォルトの名無しさん
2017/01/11(水) 15:28:17.61ID:qQgm92T60107デフォルトの名無しさん
2017/01/11(水) 18:57:51.34ID:dcC69ZSQすみません初心者的
0108デフォルトの名無しさん
2017/01/11(水) 19:28:32.74ID:uU4tfKciリセットボタンあるよ
http://www.helpforest.com/excel/1_book/img/ex010044_1.png
0109デフォルトの名無しさん
2017/01/11(水) 20:14:53.64ID:anvEc3zpと思ったらリセットボタンあるのか。そちらの方がいいですね。
0110デフォルトの名無しさん
2017/01/11(水) 20:23:03.75ID:1FwZUW9V0111デフォルトの名無しさん
2017/01/11(水) 22:54:27.23ID:QIrTsKqr0112デフォルトの名無しさん
2017/01/11(水) 23:23:15.83ID:JMe0AUgTまだこういう勘違いしている人がいるんだな・・
A1には2017/01/11と入ってるわけじゃない
42746という数字が入ってるだけ
0113デフォルトの名無しさん
2017/01/12(木) 05:41:59.32ID:nMoQZoqtなんだこのアホな回答
0114デフォルトの名無しさん
2017/01/12(木) 07:13:34.10ID:0A4eRqXFアスペ乙
0115デフォルトの名無しさん
2017/01/12(木) 08:41:15.75ID:Lhyp+MOo[A1].Valueが 2017/01/11 なのです。
0116デフォルトの名無しさん
2017/01/12(木) 09:48:23.99ID:Rj8+4pg/0117デフォルトの名無しさん
2017/01/12(木) 11:56:09.07ID:Cc5O9IhJ0118デフォルトの名無しさん
2017/01/12(木) 12:29:26.83ID:Lhyp+MOo表示形式が yyyy/m/d だと Text は 2017/1/11
0119デフォルトの名無しさん
2017/01/12(木) 12:45:45.01ID:6ppTquF5あとはFormat関数で好きに取り出せるんじゃ無いかな
0120デフォルトの名無しさん
2017/01/12(木) 20:01:33.08ID:6fAXJ0U30121デフォルトの名無しさん
2017/01/12(木) 20:07:33.99ID:yR99XFwh0122デフォルトの名無しさん
2017/01/12(木) 20:39:27.21ID:UE8PLb8+0123デフォルトの名無しさん
2017/01/12(木) 20:42:03.60ID:eBGwra53型によって処理が変わると思うのだが
0124デフォルトの名無しさん
2017/01/12(木) 20:46:28.71ID:UiBlAwbGDate型の変数に入れれば日付になるじゃん
0125デフォルトの名無しさん
2017/01/12(木) 20:54:08.91ID:yR99XFwh0126デフォルトの名無しさん
2017/01/12(木) 21:08:16.17ID:eBGwra53例えば
2017/1/12
20170112
1/12/2017
シリアル値
全部同じになるっけ?
0127デフォルトの名無しさん
2017/01/12(木) 21:22:08.35ID:UiBlAwbG誰がそのまま使うって言ってんの
fileName = baseName & cStr(dte)
みたいな使い方するわけでしょ
>>126
知らんけど表示形式が違うだけならなるんじゃねえの
0128デフォルトの名無しさん
2017/01/12(木) 22:11:57.92ID:Mdtl8esZもはや、妄想・空想・予想のスレッドに成り果てたか
盆、暮れ、正月ぐらいせめて少しは頭を休ませてろ
0129デフォルトの名無しさん
2017/01/12(木) 22:24:16.56ID:URc2UNFw保存場所どこにするかによってはスペースは使えないが。
0130デフォルトの名無しさん
2017/01/12(木) 22:26:45.06ID:VnxSw5mv0131デフォルトの名無しさん
2017/01/12(木) 22:40:44.11ID:URc2UNFwそうなんだ・・・しつれいした
0132デフォルトの名無しさん
2017/01/12(木) 23:01:38.74ID:Rj8+4pg/大型機だとファイルには整数のID番号が付いてるだけでファイル名とは切り離されて管理されてるやつがあるな
だから同じ名前のファイルがいくつも作れてしまったりする
0133デフォルトの名無しさん
2017/01/13(金) 12:38:07.17ID:XGAIFzZiA 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
どちらのほうが処理速度が向上しますか?
0134デフォルトの名無しさん
2017/01/13(金) 12:39:52.43ID:xEiCBlzVvlookup
0135デフォルトの名無しさん
2017/01/13(金) 12:43:08.31ID:5NHpz1Tavlookup→配列に入れてif分岐→findの順番の早さ
findが遅いのは確か
0136デフォルトの名無しさん
2017/01/13(金) 12:58:05.11ID:dokIsM4Jシートでsql
0137デフォルトの名無しさん
2017/01/13(金) 13:02:40.73ID:5NHpz1Ta0138デフォルトの名無しさん
2017/01/13(金) 13:15:44.54ID:HxNmVQ/nってことは、後者のほうが速いということでしょうか?
0139デフォルトの名無しさん
2017/01/13(金) 13:24:35.21ID:Pq7AWenX0140デフォルトの名無しさん
2017/01/13(金) 13:32:41.32ID:q4yhPByZ伝えてなくてすいません
0141デフォルトの名無しさん
2017/01/13(金) 13:33:30.31ID:q4yhPByZ>>133です
0142デフォルトの名無しさん
2017/01/13(金) 13:43:05.20ID:xEiCBlzVvbaにはWorksheetFunctionと言うクラスが用意されている
その中にvlookupと言うメソッドがあるのでそれを利用すればいかが?
これを使いたくないってことなら勘違いでごめんなさい
0143デフォルトの名無しさん
2017/01/13(金) 13:58:35.74ID:5NHpz1TaOfficeTANAKA 高速化テクニックでググれば幸せになれるよ
0144デフォルトの名無しさん
2017/01/13(金) 17:01:55.73ID:OhnPZwk70145デフォルトの名無しさん
2017/01/13(金) 22:23:24.75ID:N+jcCuX6少なければWorksheetFunction.Vlookupで十分。
多ければ、高速VlookupかSQL。
0146デフォルトの名無しさん
2017/01/13(金) 22:45:47.47ID:IUqNU+pkDim 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
0147デフォルトの名無しさん
2017/01/14(土) 14:19:38.12ID:eOx3RZduお願いします。
セルA1に aaa
0148デフォルトの名無しさん
2017/01/14(土) 14:20:50.66ID:eOx3RZduお願いします。
セルA1に aaa"bbbb"cc
セルA2に a"dd"cccc
という文字列があるとき、
セルB1に bbbb
セルB2に dd
(それぞれ、" "で挟まれた文字列)を出力する。
0149デフォルトの名無しさん
2017/01/14(土) 14:28:13.29ID:hMPeMSWCsplit
0150デフォルトの名無しさん
2017/01/14(土) 14:36:22.91ID:l+bXNSZhSub Macro1()
[B1] = Split([A1], """")(1)
[B2] = Split([A2], """")(1)
End Sub
0151デフォルトの名無しさん
2017/01/14(土) 14:59:32.62ID:TCZ/fLWF文字列関連の関数あらかた覚えなさい
難しくないから
0152デフォルトの名無しさん
2017/01/15(日) 11:53:32.85ID:ncM8p+KA高速vlookupって何?
0153デフォルトの名無しさん
2017/01/15(日) 12:46:48.76ID:m2E/VbcRってレベルの質問が来るとガクッと来る
0154デフォルトの名無しさん
2017/01/15(日) 14:21:19.63ID:FqEOuXryレベルの制限をしてるわけじゃなし
0155デフォルトの名無しさん
2017/01/15(日) 14:36:53.95ID:m2E/VbcRまあそらそうなんだけども
ググった方が早くねって言うね
0156デフォルトの名無しさん
2017/01/15(日) 18:05:40.34ID:trUVIHlw検索の仕方も分からないような状態ならともかく、
このスレに書いてる単語を並べていけばたどり着くだろ的なのも多い。
ちゃんとしたサイトの方が図で説明してくれるから分かりやすいだろうし。
0157デフォルトの名無しさん
2017/01/15(日) 19:40:36.26ID:1Rt+ERT2検索対象を昇順ソート
↓
VLOOKUPで1列目の文字を近似値一致検索
(但しA:Aとかは駄目で、A1:A500とかにする)
↓
検索で引っかかった文字が、
検索値と完全一致なら、
再度VLOOKUPで近似値一致検索
正直、何でこれで速くなるのかわからんし、
普通のVLOOKUPの検索アルゴリズムも、
最初からそうしろよって思う。
0158デフォルトの名無しさん
2017/01/15(日) 21:24:21.25ID:tflJaJ6vとにかく完全一致検索が遅いから使いたくない、じゃどうするか
ってことなんででしょうね。
Office Tanakaの
http://officetanaka.net/excel/function/function/vlookup.htm
に「検索値が見つからないとき超えない最大値を返す仕様がとても助かる」とあるけど
検索値をはさむ[from, to]がわかるのが一番助かると思う。
(検索値が存在しない場合は、to < from)
0159デフォルトの名無しさん
2017/01/16(月) 02:21:21.17ID:vCWbmiBt完全一致だとデータがソートされてる保証が無いから全件検索必須
近似値指定だとデータがソートされてる前提だから効率的に探せる
そいう事だろ、たぶん
0160デフォルトの名無しさん
2017/01/16(月) 03:49:06.71ID:L7GtxIZz0161デフォルトの名無しさん
2017/01/16(月) 05:39:23.40ID:/FyYs0Da馬鹿です。
Google先生に聞いたら「もしかして二分探索木?」と言われてしまいました。
これが高速Vlookupの原理?
WikiPediaで調べてみたのですがピンときません。
分かりやすい解説サイトでもあれば教えてください。
# 旧いMac(System7時代)のFileAllocationTableに B-Treeなんたら
というものがあったような、、関係あるのかな?
0162デフォルトの名無しさん
2017/01/16(月) 05:48:43.71ID:K1gRWFXI0163デフォルトの名無しさん
2017/01/16(月) 07:22:24.37ID:Zl2rcSDP木構造にはなっていないのでは?
0164デフォルトの名無しさん
2017/01/16(月) 08:37:09.32ID:6pMMhvrL二分探索は別に木構造じゃなくても...
って書こうとしたら >>160 は「二分検索木」って書いてたのか
まあ検索でも間違いじゃないだろうけどあまり使わないような気がするな
0165デフォルトの名無しさん
2017/01/16(月) 11:22:13.15ID:q0YsoZyP0166デフォルトの名無しさん
2017/01/16(月) 15:06:17.75ID:CkU8X3ZM0167デフォルトの名無しさん
2017/01/16(月) 23:26:54.44ID:Py9dY2eU一致するのを見つけたら、それ以上探さないで次に行けば、
近似値でも同じことじゃないかと思うんだけど。
0168デフォルトの名無しさん
2017/01/16(月) 23:32:38.53ID:Zl2rcSDPソート済かどうかなんてわからないから頭から舐めていく
0169デフォルトの名無しさん
2017/01/17(火) 00:13:17.79ID:HvycQCZc一致するのが複数あっても、
どうせ1番上の1個しか拾ってこないんだから、
見つかった時点でループ抜けりゃいいじゃんって事なんだけど。
近似値だと探し方が違うの?
0170デフォルトの名無しさん
2017/01/17(火) 00:17:50.89ID:jzPK8o2Cいやだから頭から一つ一つ舐めていく必要があるかどうかの違い
0171デフォルトの名無しさん
2017/01/17(火) 00:26:02.89ID:Upzxz6/t近似値だと頭から見なくてよいのはなんで
具体的にどうやってると考えてるの
0172デフォルトの名無しさん
2017/01/17(火) 00:28:39.30ID:jzPK8o2C辞書で単語を引くときにやっているやり方さ
0173デフォルトの名無しさん
2017/01/17(火) 00:32:26.63ID:Upzxz6/t辞書を作るときは頭から見なくてよいの?
0174デフォルトの名無しさん
2017/01/17(火) 01:00:47.32ID:035vzIzN書籍としての辞書を利用するときをイメージするといいかも
まず視覚的に先頭文字の見出しの位置を開いて調べる
この感覚
近似値を利用する場合は「文末違うけどだいたいこんな感じだよね」って得るためより正確な情報を得るためにはソートする必要がある
完全一致だとそもそも一致していることが条件となるのでソートする必要がなくなる
正確に言うと異なると思うけどだいたいこんなイメージ
0175デフォルトの名無しさん
2017/01/17(火) 01:13:18.56ID:mp4Rluyj0176デフォルトの名無しさん
2017/01/17(火) 06:36:26.66ID:Upzxz6/t完全一致でも昇順に並べられていることを前提とすれば辞書方式が使えると思うけどな
0177デフォルトの名無しさん
2017/01/17(火) 07:13:51.32ID:jzPK8o2C使えるが そういう仕様に なってない
0178デフォルトの名無しさん
2017/01/17(火) 09:11:54.79ID:035vzIzN0179デフォルトの名無しさん
2017/01/17(火) 19:24:38.16ID:gxb7F/t0いろいろ勉強になりました。
十数年、vlookupは特殊な場合を除いて完全一致で使うものだと思っていました。
数十万のvlookupをかけて3時間ぐらい帰ってこないような処理をしたことがあり
いま考えると無謀だったなと、、
0180デフォルトの名無しさん
2017/01/17(火) 20:31:05.76ID:EPmzwVhoどなたか教えてくださいお願いします。
イメージ図:
http://www.dotup.org/uploda/www.dotup.org1127385.jpg
I1にXML文、A〜G列の1-2行目がある状態でVBAを実行すると、
A〜G列の3行目から下が出力されるイメージです。
XML文全体は約500行のものが複数、どれも階層は4以下です。
以上、よろしくお願いします。
0181デフォルトの名無しさん
2017/01/17(火) 21:21:06.99ID:pDqJREhGこの辺りを見てがんばれー
http://freefly3104.hatenablog.com/entry/2015/04/03/222516
0182デフォルトの名無しさん
2017/01/17(火) 21:22:53.32ID:UOrZs7iTノード名もパラメーターとして出す(イメージ図で言う太字の箇所)
で良いのかい?
あと、階層の各列には同じ数値しか入らない
で良いのかい?
これを求めているのなら求めているで構わないけど得られる結果をまた精査することになると思う
0183デフォルトの名無しさん
2017/01/17(火) 21:47:24.91ID:pDqJREhGあと出力順が
1
2
3
3
3
のようになってるけど
1
2
3
3
2
3
つまり Subject が2回出力されるんじゃダメ?
0184デフォルトの名無しさん
2017/01/17(火) 21:49:25.15ID:EPmzwVhoありがとう。
実はこのサイトとかを参考に試行錯誤したがうまくできくてここで尋ねたんだ。
>>182
はい、おっしゃる通り
・ノード名もパラメータとして(太字で)出す。
・階層の各列には同じ数字しか入らない。B列は空白か1か、C列は空白か2、・・・。
です。
0185デフォルトの名無しさん
2017/01/17(火) 21:53:52.16ID:EPmzwVho1
2
3
3
2
3
のようにSubjectを2回出力するのだとだめです、申し訳ない。
これも、1人でできない原因の一つです。
許されたらfor文で各行に対してsplitとか使えばなんとかなりそうだけど・・・
0186デフォルトの名無しさん
2017/01/17(火) 23:53:22.45ID:HYIsieSIその場合
<xxx ...>
<...>
<...>
</xxx>
<yyy ...>
<...>
<...>
</yyy>
<xxx ...>
<...>
<...>
</xxx>
の場合はどのように出力するの?
タグ名毎に集約するの?
0187デフォルトの名無しさん
2017/01/17(火) 23:55:02.78ID:HYIsieSI<xxx ...>
<...>
<...>
</xxx>
<yyy ...>
<...>
<...>
</yyy>
<xxx ...>
<...>
<...>
</xxx>
のケースね。
0188デフォルトの名無しさん
2017/01/18(水) 00:16:31.88ID:P2ujaP/Jはい、そのケースではタグ名毎に集約します。つまり、
<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が複数出る)
0189デフォルトの名無しさん
2017/01/18(水) 07:02:26.64ID:KfZHaLf7<xxx ...>
<yyy ...> -- (1)
</yyy>
</xxx>
<zzz ...>
<yyy ...> -- (2)
</yyy>
</zzz>
<xxx ...>
<yyy ...> -- (3)
</yyy>
</xxx>
のケースで (1) と (3) も集約するの?
たぶん xml からの読み込みと集約処理を分けた方がいいと思う。
0190デフォルトの名無しさん
2017/01/18(水) 08:46:32.65ID:dxlKDUod携帯から失礼します。
はい、その場合も集約します。
具体的にはどんなコードで書いたらよろしいですかね。
0191デフォルトの名無しさん
2017/01/18(水) 10:08:50.79ID:nvWV6Cl10192デフォルトの名無しさん
2017/01/18(水) 10:46:36.89ID:mepmwC6J0193デフォルトの名無しさん
2017/01/18(水) 12:19:13.71ID:zXM8oXohGroovy とかで、すぐに出来るだろ
0194デフォルトの名無しさん
2017/01/18(水) 12:35:52.38ID:4FnlBNL6すぐw
じゃあ書いてみろよ
0195デフォルトの名無しさん
2017/01/18(水) 12:38:39.68ID:NBGHKSlQ0196デフォルトの名無しさん
2017/01/18(水) 12:54:48.99ID:Fv9px6Lv例えば文字が入ってなくても色や太さが設定されてるとか
0197デフォルトの名無しさん
2017/01/18(水) 13:04:49.97ID:UZ6KtMVe普通にセルのプロパティで取得すればいいんでない
0198デフォルトの名無しさん
2017/01/18(水) 13:07:57.97ID:Fv9px6LvIf Range("A1").Value="" Then
でいけますか?
0199デフォルトの名無しさん
2017/01/18(水) 13:25:21.60ID:UZ6KtMVeforecolorとかbackcolorとかだよ
オブジェクトブラウザでcells調べてみ?
0200デフォルトの名無しさん
2017/01/18(水) 15:02:26.86ID:zXM8oXohdef root = new XmlParser().parse("ファイル名.xml")
root.タグ名.each{
println it.text()
ここで処理する
}
it は、イタレータから渡ってくる、暗黙の要素を指す
0201デフォルトの名無しさん
2017/01/18(水) 17:11:44.24ID:XrR2JBi4そもそも、なんでExcelに展開しようとしてるんだ?
それが最終目的か?
あと、自分でどこまでできたのか書いてくれ。
0202デフォルトの名無しさん
2017/01/18(水) 17:46:16.92ID:WZOpQPDJXML関連
0203デフォルトの名無しさん
2017/01/18(水) 19:44:31.06ID:zXM8oXoh<Subject math="sugaku">
1回目の<Subject>の際、japanese, math の、2つが取れているのは、Traverse の幅優先探索か?
普通は、深さ優先探索だけど
様々な言語を見たけど、日本語のサイトで、Traverse の処理を書いているサイトは、ほとんどない。
どないなっとんねん?
0204デフォルトの名無しさん
2017/01/18(水) 20:09:10.01ID:P2ujaP/JExcelに展開するのが最終目的であってます。
現在自分ではこのような状況・・・
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に出す方法がわからない。
0205デフォルトの名無しさん
2017/01/18(水) 20:17:32.50ID:WZOpQPDJでgetelementsbytagname()とかつかう
0206デフォルトの名無しさん
2017/01/18(水) 20:26:10.85ID:9qUMY5Wm馬鹿過ぎて話しにならない。
馬鹿に無理。
0207デフォルトの名無しさん
2017/01/18(水) 20:47:34.80ID:IDSE4GPaふぅ
0208デフォルトの名無しさん
2017/01/18(水) 21:15:38.89ID:zXM8oXohただ、traverse の説明が、日本語のサイトでは見当たらない。
深さ優先ではなく、幅優先探索だろ?
0209デフォルトの名無しさん
2017/01/18(水) 21:22:46.40ID:uheDDMMjDOMじゃないと結構つらいかもよ 出来ん事はないけどね 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
0210209
2017/01/18(水) 21:23:19.50ID:uheDDMMj'ノードパラメータ表示
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
0211デフォルトの名無しさん
2017/01/18(水) 21:25:28.46ID:zXM8oXohただ、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 関数が最初からあれば、もっと簡単。
それに幅優先探索を指定する
0212デフォルトの名無しさん
2017/01/18(水) 21:56:11.82ID:P2ujaP/Jありがとう。
実際やってみたらA3とB3に1が出力されて、
オブジェクト変数またはWithブロック変数が設定されていません
と言われました。どうしてだろ。。。
>>211
はい、幅優先探索です。
ありがとうございます。transverseについてちょっと調べてみます。
0213デフォルトの名無しさん
2017/01/18(水) 22:00:58.72ID:uheDDMMjXML規則に則ってる?
あと ノード名(タグ名?)は 大文字小文字 区別するぜ
どっか XMLファイルUP出来ない?
0214デフォルトの名無しさん
2017/01/18(水) 22:08:43.87ID:uheDDMMjもしかして↓このまま? 実際のXMLファイル名に修正してよね
XMLDoc.Load "D:\XML.txt" 'XMLファイルを読み込む
0215デフォルトの名無しさん
2017/01/18(水) 22:12:35.06ID:P2ujaP/J実際の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>
0216デフォルトの名無しさん
2017/01/18(水) 22:29:42.43ID:uheDDMMjXML読み込み失敗してるね
※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
0217デフォルトの名無しさん
2017/01/18(水) 22:30:45.22ID:vXs3og/7シートだと階層構造のデータを保存しにくいからxmlファイルにして保存したい
0218デフォルトの名無しさん
2017/01/18(水) 22:41:40.88ID:P2ujaP/Jありがとうございます。エラーはなくなりました。
ただ1つ問題が・・・
math,sugakuを読み込んでいない。8行目と9行目の間に入れたいのですが。
実行画面結果は以下のようになりました
http://www.dotup.org/uploda/www.dotup.org1128435.jpg
0219デフォルトの名無しさん
2017/01/18(水) 22:50:58.80ID:uheDDMMj'同じ名前の子ノードを 最初の一つに集約
で集約してるからそうなるが(その下は移動してる)
前からの レスで集約するって言ってたんじゃない?
'同じ名前の子ノードを 最初の一つに集約
の(FOR〜NEXT)部分ざっくり削除してみ
0220デフォルトの名無しさん
2017/01/18(水) 23:09:44.67ID:P2ujaP/Jあー、申し訳ない。
7行目のSubjectの下に、japaneseとmathをまとめて出力するという意味で使ってしまっていました。
0221デフォルトの名無しさん
2017/01/18(水) 23:20:05.28ID:P2ujaP/Jという意味です
0222デフォルトの名無しさん
2017/01/19(木) 00:09:17.23ID:wXKnExNuこゆう事かな?(同じパラメータは 最後のに置き換えられるよ)
下をそっくり入れ替えて
'同じ名前の子ノードを 最初の一つに集約
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
0223デフォルトの名無しさん
2017/01/19(木) 00:38:26.41ID:qjpOvOJuプログラムでプログラム文を自動生成します、みたいな話だろ?
0224デフォルトの名無しさん
2017/01/19(木) 05:02:36.80ID:WDgxZeysまたは既に、外人が作って、Gitにあるはず。
日本のサイトで探しても、見つからない
それに、深さ優先探索か幅優先探索を指定する
Pythonのwalkは、あるディレクトリ以下の階層を渡り歩く。
つまり、それのXML版だろ
ディレクトリもXMLも、Tree だから、基本的には同じ
0225デフォルトの名無しさん
2017/01/19(木) 06:58:46.51ID:JadLiFtg> シートだと階層構造のデータを保存しにくいからxmlファイルにして保存したい
XML 文字列ををセルとかブックのプロパティとかに入れときゃいいだけじゃないの?
0226デフォルトの名無しさん
2017/01/19(木) 07:34:02.29ID:R0f6tJX+できたああああああああああああ
ありがとうございます!
罫線やノード名の一部を太字にするなど微修正は自分でできました。
皆様ありがとうございました。
0227デフォルトの名無しさん
2017/01/19(木) 12:16:13.59ID:SpG+j8gZ1 山田 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"と日付が入り、表示形式がおかしくなってしまいます。
繰り上げのコードが間違っているのでしょうか?
0228デフォルトの名無しさん
2017/01/19(木) 12:21:46.57ID:4RX8xFF/[h]:mm
0229デフォルトの名無しさん
2017/01/19(木) 12:47:27.51ID:ZXvOrtNX解決しました
ありがとうございます
0230デフォルトの名無しさん
2017/01/19(木) 15:08:53.45ID:SN1gevnSエクセルにはブック共有状態で変更履歴記録機能があり、新しいシートに変更履歴一覧を作成できると思います。
そこで、VBAで変更期間「すべて」で「新しいシートに変更履歴一覧を作成」の操作をしたいのですが可能でしょうか?
大量のドキュメントの変更履歴を取りたいので、マクロ化したいのが目的です。
可能であればやり方を教えていただきたいです。よろしくお願い致します。
0231デフォルトの名無しさん
2017/01/19(木) 15:37:44.80ID:irXhj7sGとりあえずマクロの記録を試してみたら?
0232デフォルトの名無しさん
2017/01/19(木) 15:50:51.90ID:9G0IwAcwこれは俺も知りたいc++だとxmlに書いてるのよく見るけどvbaはどうなんだ
0233デフォルトの名無しさん
2017/01/19(木) 18:24:05.68ID:xZWyIIjd大きな差があるようですがこんなものですか。
7万レコードのセル値取得に使ったのですが、前者は0.3秒ほど
後者は130秒かかりました。
上のほうのレスで .Textを見つけて喜んで使ってみたのですが、、
0234デフォルトの名無しさん
2017/01/19(木) 20:17:42.34ID:irXhj7sGTextの方は書式を評価しないといけないからそんなものじゃね?
0235デフォルトの名無しさん
2017/01/19(木) 20:23:44.41ID:R0f6tJX+0236デフォルトの名無しさん
2017/01/19(木) 21:13:36.84ID:9zfnUwsNなるほど
.Valueで取得してから書式あてた方が無難ですね
0237デフォルトの名無しさん
2017/01/19(木) 23:40:16.64ID:qjpOvOJuValueで取得しようとすると、
#N/Aでコケるから、ずっとText使ってたわ!
ん?
でも0.3秒と130秒って違い過ぎじゃないか?
0.3秒なんて、For Nextじゃ取れないと思うが。
a=Range("A1:A70000").Valueとかじゃないと。
0238デフォルトの名無しさん
2017/01/20(金) 04:41:52.83ID:9/J9Uge2そう言われると、、あらためて追試。
試したコードはこんな感じ。
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"を試しました。
(続く)
0239デフォルトの名無しさん
2017/01/20(金) 04:43:33.99ID:9/J9Uge2(続き)
結果、、
---------------------------------------------
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です。
0240デフォルトの名無しさん
2017/01/20(金) 11:00:31.99ID:32Bwzd9Pシート1のA列で文字列の色を変えてその後A列に同じ文字列が書き込まれたら同じ色に変えたいんです。
そして出来たらシート2のA列の同じ文字列も同じ色にしたいんです。
誰かコード分かる方いますでしょうか?
0241デフォルトの名無しさん
2017/01/20(金) 13:04:58.83ID:nnKMBoVDスマホから書き込もうと思ったら案外大変で諦めた
A列の重複を排除したリストを作成(配列、コレクション等)
リストとA列を比較して色を指定
で行けるんだけど、何がわからんのか
文字列の種類は不定なのか固定なのか、色に指定はあるのかなど情報も少ない
0242デフォルトの名無しさん
2017/01/20(金) 13:05:01.85ID:JXdqXSkU自分でマクロの記録で調べろよ
0243デフォルトの名無しさん
2017/01/20(金) 14:58:10.41ID:Nvso2zBq0244デフォルトの名無しさん
2017/01/20(金) 16:54:43.86ID:bVBZQrA4学校でgoogle financeのapiを利用したのを作成しているのですが
A列の証券コードの羅列を読み取りURLに追加しJSONのティックデータを取得するところまでは
行けたのですが、どうやって個々にパースすればいいかわかりません、生データを取得するまでのコードは以下
Dim W As Worksheet: Set W = ActiveSheet
Dim i As Integer
Dim Last As Integer
Last = W.Range(
0245デフォルトの名無しさん
2017/01/20(金) 16:59:50.09ID:bVBZQrA4取得したでーたは下の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
とずっと続いています
これを個々にパースしてセルごとに振り分けたいのですが
個々にパースするにはどのようにすればいいかわかりません
誰か助けてください
0246デフォルトの名無しさん
2017/01/20(金) 17:12:18.70ID:gQ8iElJX"vba json パース"でググる
0247デフォルトの名無しさん
2017/01/20(金) 18:21:41.59ID:FuK3VNeE在日か?日本語不自由そうだな
0248デフォルトの名無しさん
2017/01/20(金) 18:33:30.59ID:Zm/Pjw4Evbaからセルに10銘柄程コードを入れても頻繁にすべてN/Aと出てしまうのです
接続が切れてるわけではなく、例えばexcelの上書き保存をクリックするとN/Aが
消えてすべて表示されるのです
vbaでは画面の更新は切ってないのですが原因は考えられますか?
0249デフォルトの名無しさん
2017/01/20(金) 19:25:28.08ID:gGEm4cbBPowerShellやC#やVB.NETじゃダメだったのか
0250デフォルトの名無しさん
2017/01/20(金) 20:22:24.18ID:ymDflbNb結果を Excel で処理したいんだろ
なら VBA が一番自然だわな
ただ言語としての機能がいまいちだから俺なら PowerShell で取得して Excel に書き込むかな
0251デフォルトの名無しさん
2017/01/20(金) 20:58:17.11ID:mJKyjGCeいや、いいんじゃないか?
ただスレチになるから
そういう話は.Netのスレでやればいいだけで
0252デフォルトの名無しさん
2017/01/20(金) 21:08:26.20ID:MJq7L3EOこれ?
DATA_SESSIONS はjsonの配列表記っぽいけど、データ部は単なるカンマ区切りのような(他も改行区切りだしjsonじゃないような)
.NETもjsonのパースにはNuGetが必要じゃなかったっけ(なんかDLLが増えるのが嫌で自力パースしたことある)
PowerShellはjsonのパースもできるのか
0253デフォルトの名無しさん
2017/01/20(金) 21:31:05.58ID:z3TtdYe7えくせるしかないなら仕方ない
0254デフォルトの名無しさん
2017/01/20(金) 22:33:30.45ID:vub4eIsVそれは本職プログラマーの発想だろうな。
事務職プログラマーは、VBAが一番いいの。
普段からエクセル使ってるから。
0255デフォルトの名無しさん
2017/01/20(金) 22:47:39.08ID:RRdjAoJXもうちょっとPSや.NETとの連携が楽になれば助かるね
0256デフォルトの名無しさん
2017/01/20(金) 23:00:24.99ID:v0MXJAlx0257デフォルトの名無しさん
2017/01/20(金) 23:58:46.82ID:0ryOpRhFまあ VB.Net for Application でもいいけど
0258デフォルトの名無しさん
2017/01/21(土) 00:17:22.31ID:O6MYDtgM0259デフォルトの名無しさん
2017/01/21(土) 00:37:57.62ID:7WDSmlh4送信先やCCやタイトルや本文は書くことができました。
しかし本文のある部分を好きな色にしたり好きなフォントにしたり好きなサイズにしたりハイパーリンクをつけたいんです。
そのためにはどうすればいいでしょうか?
0260デフォルトの名無しさん
2017/01/21(土) 08:04:31.56ID:6NvQGvfC2chのバグだろう
書き込み確認画面が出る際、" を使うと、そこで文字列の終了とみなされる。
" の代わりに、\" とエスケープすれば、どうだろう?
それか、書き込み確認画面が出たら、1度キャンセルすれば、確認画面は出ないようになった
0261デフォルトの名無しさん
2017/01/21(土) 09:24:23.74ID:W/Qp5igc↓のサイトを参考にして作ってみたら?
http://outofmem.tumblr.com/post/63355773212/vbavbaでjsonをパースする
ざっくり 作って見たけど なんとかなりそうよ
学校の課題らしいからこの辺で
では
0262デフォルトの名無しさん
2017/01/21(土) 10:17:45.16ID:W/zpHkC+学生なら勉強として書いてみる価値はある
0263デフォルトの名無しさん
2017/01/21(土) 11:18:37.44ID:1cIKmUbZHTML でやるならここのサンプル
https://msdn.microsoft.com/ja-jp/library/office/ff869979.aspx
リッチテキストでやるならフォーマットを RTF に設定して RTFBody に設定すればいい
https://msdn.microsoft.com/ja-jp/library/office/ff867828.aspx
0264デフォルトの名無しさん
2017/01/21(土) 11:23:47.66ID:7WDSmlh4ありがとうザマス。
やってみるでガンス。
0265デフォルトの名無しさん
2017/01/21(土) 11:27:24.97ID:7WDSmlh4Outlookのカレンダー(おそらく型はolAppointmentItemでしょう)の本文でも
本文のある部分を好きな色にしたり好きなフォントにしたり好きなサイズにしたりハイパーリンクをつけるにはどうすればいいでしょう?
ちょっと調べるとBodyFormatプロパティやHTMLBodyプロパティはなさそうですが。
0266デフォルトの名無しさん
2017/01/21(土) 11:44:27.71ID:1cIKmUbZHTMLBody はないけど RTFBody はあるよ
https://msdn.microsoft.com/ja-jp/library/office/ff861303.aspx
0267デフォルトの名無しさん
2017/01/21(土) 12:01:08.22ID:7WDSmlh4わたしのOffice2007のバージョンのOutlookにはRTFBodyプロパティは無いようなのですが。
http://www.dotup.org/uploda/www.dotup.org1130546.png
でもOffice2007でもカレンダーの本文のある部分に手動で装飾ができるのでマクロでもできるはずだと思います。
どうすればいいのでしょうか?
0268デフォルトの名無しさん
2017/01/21(土) 13:22:18.60ID:JwMYXArD全部用意してやるからActiveXやWin32APIを使うなと言わんばかりの不便さ
言語の内部にない機能を外から持ってくるからオープン系と言うんだと思ってたけど
0269デフォルトの名無しさん
2017/01/21(土) 13:57:11.70ID:1cIKmUbZう〜ん、ないなら無理っぽいかと
> でもOffice2007でもカレンダーの本文のある部分に手動で装飾ができるのでマクロでもできるはずだと思います。
アプリの機能の全てをマクロでサポートしてるとは限らんし...
0270デフォルトの名無しさん
2017/01/22(日) 18:24:33.89ID:dK0oU8+I仕事で各部署から大量に写真が来て、部署毎の名前のフォルダに連番ファイルで保存しているのですが、
フォルダの最後のファイルだけピックアップする必要ができてしまいどうにも困っています。
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くらいの勢いで増えてます…
0271デフォルトの名無しさん
2017/01/22(日) 18:45:46.18ID:mco4N0ih0272デフォルトの名無しさん
2017/01/22(日) 18:56:47.41ID:PXtZmaP4切り取り貼り付けで馬鹿だとよくわかる
ロジック的にも間違いを引き起こすようなロジックしか考えられないし
馬鹿確定
0273デフォルトの名無しさん
2017/01/22(日) 19:13:35.66ID:K9IWtO+t>>272みたいな上級者気取りが現れるから仕方ないか・・
これを参考にして
http://officetanaka.net/excel/vba/file/file07.htm
0274デフォルトの名無しさん
2017/01/22(日) 19:49:33.32ID:YJLP3OgH$work =
0275デフォルトの名無しさん
2017/01/22(日) 20:32:29.70ID:b7Xc1TTLvbaでもいいけど
普通にvbscriptみたいなものでも簡単にできるよ
vbs フォルダ 検索
でぐぐったらどうでしょう
0276デフォルトの名無しさん
2017/01/22(日) 20:54:41.71ID:XKc56KzGうるせえぞ馬鹿
真面目に質問してる人になんだそりゃ。
0277デフォルトの名無しさん
2017/01/22(日) 21:01:31.37ID:xqqm72Ga各フォルダには画像以外のファイルも入ってるかどうか
拡張子は小文字のjpgだけか、JPGやjpegも混ざってるかどうか
それだけ教えて
0278デフォルトの名無しさん
2017/01/22(日) 21:10:37.07ID:PXtZmaP4馬鹿のくせに間違いを絶対にしない前提の方法で話しを進めるのが馬鹿たる所以。
0279デフォルトの名無しさん
2017/01/22(日) 21:26:21.62ID:o6OZ0Umu0280デフォルトの名無しさん
2017/01/22(日) 21:41:22.76ID:uPXBwAbd拡張子がなんにしても全パターン網羅してリプレイスして番号で最大値とって取得やんな?
0281デフォルトの名無しさん
2017/01/22(日) 21:43:59.78ID:fxkBMvoQあ、ごめん
即座に罵倒するようなヤツとは関わらないって決めてるので誰にも迷惑のかからないところで勝手に盛り上がっててください
0282デフォルトの名無しさん
2017/01/22(日) 22:05:16.58ID:5pcXYXa+0283270
2017/01/22(日) 22:11:46.10ID:dK0oU8+Iフォルダの中身は小文字の.jpgのみです。
>>273
参照のページで、ファイル名一覧が取得できるまでは解るのですが、
それを取得してどうすれば良いのかが解りませぬ。
0284デフォルトの名無しさん
2017/01/22(日) 22:21:58.08ID:K9IWtO+t知らないから馬鹿じゃないだろ
>>270を「馬鹿のくせに間違いを絶対にしない前提の方法で話しを進める」と決めつけるのが馬鹿
>>283
一覧をソートすれば取得できる
というオレもVBA初心者ゆえ、正確に答える自信がないので、概念だけでスマンw
0285デフォルトの名無しさん
2017/01/22(日) 22:30:17.75ID:l2Nz+a62>c:\最後\ のフォルダに切り取り貼り付けしたいのですが
移動(元フォルダからは消える)するより
コピーするか ショートカット作成した方が良いんじゃないかと思うのだが
どうよ
後 実際の各フォルダは c:\ の直下なの?
0286デフォルトの名無しさん
2017/01/22(日) 23:05:08.45ID:4Incfzmyスレ違いだけど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
}
0287デフォルトの名無しさん
2017/01/22(日) 23:12:38.88ID:qK5fG7bFちゃんと動くかどうかテストしてないんでバックアップとってな
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
0288デフォルトの名無しさん
2017/01/22(日) 23:43:51.53ID:Wwv6/pAu何がなんだかさっぱり
0289270
2017/01/23(月) 00:41:20.21ID:U6yzB2m0>>287 様
お手数掛けてしまい申し訳ありませんが、どちらも動きませんでした…
「ファイルが見つかりません」とエラーメッセージが出てしまいます。
0290デフォルトの名無しさん
2017/01/23(月) 00:55:01.54ID:ST2LRMx20291デフォルトの名無しさん
2017/01/23(月) 01:08:05.39ID:ayLfxszv適切に弄った上で見つからないのかな
0292デフォルトの名無しさん
2017/01/23(月) 01:55:52.05ID:sOYRMmGw0293デフォルトの名無しさん
2017/01/23(月) 04:46:02.80ID:WP/2JyPJhttp://i.imgur.com/wCOzgx4.png
もちろん最初のフォルダ定義は書き換えたよな?
そこ以外はフォルダ名もファイル名もディスクから読み取ってるんだから、見つからないわけがないんだが
0294デフォルトの名無しさん
2017/01/23(月) 04:51:29.77ID:WP/2JyPJVBAに対応したサイトは見たことないけど、
RangeとかCellsがハイライトされないと困る用途でなければVBを選択してみたら?
0295デフォルトの名無しさん
2017/01/23(月) 04:53:06.02ID:WP/2JyPJ0296270
2017/01/23(月) 06:51:27.51ID:U6yzB2m0>>293 様
別のサンプルで試したところ、きちんと動作いたしました。
最初に用意したサンプルの部署の名前にシステム外?の漢字が使われていた為に失敗していたようです。
(ひらがなの「が」が、「か+゛」になっていたという。Mac←→Winの文字コードの違いの問題?)
そちらはなんとかなるので、これで問題解決です。
皆様方、ありがとうございました。
0297デフォルトの名無しさん
2017/01/23(月) 08:12:32.04ID:sOYRMmGwなるほど! ありがとうございましたm(__)m
0298デフォルトの名無しさん
2017/01/23(月) 12:58:13.38ID:Z+1qxvbautf-8 は、濁点半濁点を分離しない
一方、utf-8-mac は、濁点半濁点を分離して、別の文字とする
0299デフォルトの名無しさん
2017/01/23(月) 15:48:10.56ID:r+jEG7u3HTMLで要素を特定するのが難しい複雑なWEB GUIを自動操作したく、キーボード入力のみ(TAB、ENTER、文字入力の組み合わせ)で原始的に操作すればいいんじゃないかと考えました
このような方法は効果的ですか?
またIE画面の取得やSendKey、busy状態の判定などはurlさえあれば可能なのでしょうか?
0300デフォルトの名無しさん
2017/01/23(月) 16:25:14.53ID:dyeHk94Y> HTMLで要素を特定するのが難しい複雑なWEB GUIを自動操作したく、キーボード入力のみ(TAB、ENTER、文字入力の組み合わせ)で原始的に操作すればいいんじゃないかと考えました
> このような方法は効果的ですか?
「効果的」の意味が良くわからないが、確実性に欠けるので実装方法としては下策。
0301デフォルトの名無しさん
2017/01/23(月) 18:23:23.13ID:iz5/M2l3何故HTMLで要素を特定するのが難しいのか?
あとそれが難しいのにキーボード操作なら目的の操作を出来るのは何故か?
効果的かどうかどうやって判断するのか?
0302デフォルトの名無しさん
2017/01/24(火) 09:50:42.62ID:Q9g90nxH>>301
回答ありがとうございます
効果的か、というのは他に楽ないい選択があるか、という意味です
初心者なので要素の取得に時間がかかり、単純なWEBページならなんとか操作できるのでが
ジャバの記述でソースコードがぐちゃぐちゃになっており要素の取得がしんどいです
実際のie操作を記録してコード組んでくれるソフトとか無いんですかね
0303デフォルトの名無しさん
2017/01/24(火) 11:44:50.88ID:tZ08PDgQUWSC
0304デフォルトの名無しさん
2017/01/24(火) 12:51:19.59ID:2vJhPAHlブラウザでF12キーとか押してみたら
0305デフォルトの名無しさん
2017/01/25(水) 01:50:28.88ID:mqe1OJqxコスモ関数とか。
Subを廃止にして、Zamとかどうよ。
Ifも古くなってきたから、Izuとか。
0306デフォルトの名無しさん
2017/01/25(水) 04:02:53.45ID:IbVYSEZD0307デフォルトの名無しさん
2017/01/25(水) 15:39:29.51ID:Lt8lAI1lエクセルに画像挿入する際の質問です。
エクセルに大量の画像を挿入したいのですが、ファイルが重たくなりすぎるためリン
ク挿入を考えています。
ファイルをCDにやいて先方に渡したいので、絶対パスではなく相対パスでの画像挿入
がしたいです。
エクセルファイルと大量の画像データは同じフォルダ内にあります。
Insertで挿入してもaddpictureで挿入してもメディアにフォルダごと移動したとたん
リンク切れになるので困っています。
よろしくお願いします。
0308デフォルトの名無しさん
2017/01/25(水) 17:01:41.71ID:IbVYSEZDなぜhtmlにしないの?
0309デフォルトの名無しさん
2017/01/25(水) 17:35:49.92ID:ekWp7cd2例えば B5 セルの値が、15 10 23 5
と変化したら、隣のC5のセルに、 23 と表示させたいのです。
エクセルの関数になるのかもしれませんが、ググってもどう調べても分かりません。
皆さま何卒宜しくお願い致します。
0310デフォルトの名無しさん
2017/01/25(水) 17:53:01.54ID:vlkVtG3bその要件は >>307 のどこにあたるの?
0311デフォルトの名無しさん
2017/01/25(水) 18:08:36.73ID:ncsczmSYhtmlとして保存とかできなかったっけ
0312デフォルトの名無しさん
2017/01/25(水) 19:35:21.34ID:mqe1OJqxリンク切れになる理由はわからんけど、
ファイルを開いた時に、リンク解除→再リンクすればいいんじゃないの?
0313デフォルトの名無しさん
2017/01/25(水) 21:13:17.06ID:CnexM6ZXえっ?
0314デフォルトの名無しさん
2017/01/25(水) 21:38:36.75ID:eyqKHvfT対象のセルがひとつだったらグローバル変数を使って簡単にできる
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)
と入れときゃいい
0315デフォルトの名無しさん
2017/01/25(水) 21:41:05.43ID:eyqKHvfTSub resetMax()
max__ = -1.79769313486231E308
End Sub
とかが必要かもしれない
0316デフォルトの名無しさん 転載ダメ©2ch.net
2017/01/25(水) 22:18:36.62ID:eU88gsvp板復帰(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!
0317デフォルトの名無しさん
2017/01/25(水) 22:49:29.44ID:CnexM6ZX要らないです
0318デフォルトの名無しさん
2017/01/25(水) 22:54:53.11ID:eyqKHvfTほう、なぜ?
0319デフォルトの名無しさん
2017/01/25(水) 23:05:36.18ID:AeM3WiQW0320デフォルトの名無しさん
2017/01/26(木) 01:27:18.15ID:lerVaKyH0321デフォルトの名無しさん
2017/01/26(木) 08:19:49.57ID:ZDwsAfth一回目の値取り込めは必須だから。
この場合は15は必ず最大値。
0322デフォルトの名無しさん
2017/01/26(木) 08:27:33.82ID:GoiJIG7TB5が全部マイナスのケースは?
0323デフォルトの名無しさん
2017/01/26(木) 09:20:45.29ID:ZDwsAfthあーその場合があったか!
いやー失敬失敬
な訳ない。
一回目は絶対最大値なんです。
この場合正負は、なんの意味がない。
0324デフォルトの名無しさん
2017/01/26(木) 09:50:34.79ID:8Qm9FYvM君が想定してるコードは >>314 なの それとも別のコード?
0325デフォルトの名無しさん
2017/01/26(木) 10:02:08.25ID:mPWEbfd1>>314のグローバル変数はDouble型だから何もしないと初期値は0.0だ。
これが何を意味するかはわかるな?
0326デフォルトの名無しさん
2017/01/26(木) 10:09:43.56ID:oMPl1Srsこれは恥ずかしい
0327デフォルトの名無しさん
2017/01/26(木) 11:12:41.51ID:KR9GJXBK>>325
>>326
314は考慮してない。
315のように型考慮とか手間。
0328デフォルトの名無しさん
2017/01/26(木) 11:17:55.57ID:SSl970Brそもそも会話に参加してなかったってことは理解した
0329デフォルトの名無しさん
2017/01/26(木) 11:28:23.97ID:mPWEbfd1型考慮が手間?
じゃあVariantにすればいい。Emptyであれば未初期化状態とわかるからそこで分岐できる。
そもそもなんのデータなんだ?
気温とかで最高気温をとりたいというならずっとマイナス値で推移することもあるし、
株価とかの最高値をみたいというなら正数だけ考えればいいし。
0330デフォルトの名無しさん
2017/01/26(木) 11:52:33.91ID:KR9GJXBK正しい
>>329
観点そこじゃねーよ
イチイチ型の下限をハードコーディングかよ。
何にも思わないんだw
0331デフォルトの名無しさん
2017/01/26(木) 12:00:40.09ID:mPWEbfd1使い捨ての例示だろ?
それで十分さ
0332デフォルトの名無しさん
2017/01/26(木) 12:04:08.41ID:mPWEbfd1型ごとの下限値とか一日の秒数とか、文脈で明かでかつ誰でも知っている値は本番プログラムでもなきゃそのまま例示するさ。
0333デフォルトの名無しさん
2017/01/26(木) 12:07:50.47ID:ZDwsAfthそうかもね
ただ>>309が不憫でよ。
いきなり>>314だろ。
>>315で結びが『かもしれない』
まじがんばれ>>309
0334デフォルトの名無しさん
2017/01/26(木) 12:17:36.90ID:mPWEbfd1じゃあ別な方法を示せばいい
そもそも「正負がなんの意味もない」ってどういうことだ?説明しろ。
0335デフォルトの名無しさん
2017/01/26(木) 12:31:36.89ID:SSl970Brやりようによってはグローバル変数って不要じゃないかな?
って思う
0336デフォルトの名無しさん
2017/01/26(木) 12:39:56.63ID:oMPl1Srsでも>>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
0337デフォルトの名無しさん
2017/01/26(木) 12:47:28.93ID:ZDwsAfth提示コードとは切り離す。
片手落ちの提示コードなら
初期値を型下限にしないと負側は
動かないよ。
最大値の定石算法なら正負は意味ないよ。
だって正しく求まるから。
http://d.hatena.ne.jp/geek-it/touch/20120226/p1
0338デフォルトの名無しさん
2017/01/26(木) 12:55:45.77ID:ZDwsAfthc5は試行の開始では
どういう状態なんだろうね?
0339デフォルトの名無しさん
2017/01/26(木) 12:57:50.00ID:mPWEbfd1n[0]とは何で、どうやって取得するのか教えて
0340デフォルトの名無しさん
2017/01/26(木) 12:58:02.38ID:oMPl1Srsとりあえず馬鹿ってことはわかった
グローバルにカウンタつくってIf count = 1 Then ってやっときゃいいじゃんw
0341デフォルトの名無しさん
2017/01/26(木) 13:09:31.18ID:ZDwsAfthb5からとるんだよ。
ただ
ほんとに知りたいところそこなの?
これから何を本質的に疑問に思ってる?
0342デフォルトの名無しさん
2017/01/26(木) 13:11:07.17ID:ZDwsAfthその手段で
どういった目的を達成できるか
説明お願いします。
0343デフォルトの名無しさん
2017/01/26(木) 13:16:03.48ID:mPWEbfd1B5に初めて値が(たとえば3とする)が代入されたとき、C5にはもちろん3と表示されるべきだが、それをどうやってやるの?
0344デフォルトの名無しさん
2017/01/26(木) 13:19:12.95ID:oMPl1Srsたぶん根本的に意味をわかってない
0345デフォルトの名無しさん
2017/01/26(木) 13:22:44.99ID:mPWEbfd10346デフォルトの名無しさん
2017/01/26(木) 13:24:08.19ID:oMPl1Srsだから自分でコード書いてみろって
何を勘違いしてるか自分で気づくだろ
0347デフォルトの名無しさん
2017/01/26(木) 13:26:06.34ID:oMPl1Srs0348デフォルトの名無しさん
2017/01/26(木) 13:28:19.88ID:mPWEbfd1ドンマイ
0349デフォルトの名無しさん
2017/01/26(木) 13:30:55.01ID:ZDwsAfthドンマイ
0350デフォルトの名無しさん
2017/01/26(木) 13:33:47.09ID:oMPl1Srsすまんな
コードの提示を頼むわ、飯くってくる
0351デフォルトの名無しさん
2017/01/26(木) 14:19:03.93ID:5gl79ALuWorksheet_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
セルが空でも動く
0352デフォルトの名無しさん
2017/01/26(木) 14:25:54.93ID:MANz96Le参照設定で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
0353デフォルトの名無しさん
2017/01/26(木) 14:57:52.29ID:mPWEbfd1なるほど
0354デフォルトの名無しさん
2017/01/26(木) 16:21:12.51ID:U3KmvQxt>>311
>>312
ご回答どうもありがとうございます。htmlでとは全く思いつかなかったので目から鱗でした。ただ、改ページプレビューでの印刷範囲などがhtmlだとうまくできないです。
また、絶対参照になってしまうのはexcel2013以降の仕様のようなことが書いてあるサイトを見つけました。
http://www.h3.dion.ne.jp/~sakatsu/Excel_Tips21.htm#S9
結局ファイルを分けて実ファイルを挿入する方法にします。
どうもありがとうございました。
0355デフォルトの名無しさん
2017/01/26(木) 18:30:34.79ID:Cqc92u/shttps://www.youtube.com/watch?v=CTotYTOpR9E
0356デフォルトの名無しさん
2017/01/26(木) 19:37:07.62ID:3eEczd4r0357デフォルトの名無しさん
2017/01/26(木) 19:56:43.48ID:GoiJIG7Tそれって複数のセルを扱えるようにしてるだけで初期値については >>329 の Variant と本質的には一緒だよね
0358デフォルトの名無しさん
2017/01/26(木) 20:03:13.82ID:3C+35NwQなにをどうshowしてんだよw関数名で嘘つくとかサイテーだなw
0359デフォルトの名無しさん
2017/01/26(木) 20:10:27.05ID:q3eaEqve>>329のまま複数のセルで関数を使うと想定外の結果になるんだから>>352のは優れている
0360デフォルトの名無しさん
2017/01/26(木) 20:50:17.03ID:5GTFMqAx0361デフォルトの名無しさん
2017/01/26(木) 20:55:56.92ID:uLxLwJKu> 初期値については
って書いてますやん...
0362デフォルトの名無しさん
2017/01/26(木) 20:58:31.55ID:5GTFMqAxなるほど。
すマンこ
0363デフォルトの名無しさん
2017/01/27(金) 05:00:53.63ID:wqjWN3QHセル(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
0364デフォルトの名無しさん
2017/01/27(金) 05:25:43.17ID:MGewCQt5マイナスだけ合計
Sub test()
x = Application.WorksheetFunction.SumIf(Rows(1), "<0", Rows(1))
Debug.Print x
End Sub
0365デフォルトの名無しさん
2017/01/27(金) 05:30:31.67ID:0Brpc+WLSub 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
0366デフォルトの名無しさん
2017/01/27(金) 09:12:54.82ID:xuyo3rhoセルに"/"(スラッシュ半角)か"×"(バツ)を入力したら、
そのセルに右上がりの斜線を自動で引かれるようにしたいのですが、
コードを教えてください。
スラッシュを消したら斜線も消えるようにもしたいです。
対象はSheet1の全セルです。
よろしくおねがいします。
0367デフォルトの名無しさん
2017/01/27(金) 09:21:50.43ID:E/4Vr26G0368デフォルトの名無しさん
2017/01/27(金) 09:57:52.06ID:Ne4o/N/hそんなのより対象セルを選択した状態で {ctrl + なんとか} の方が便利だしコードも簡単になると思うけどな
0369デフォルトの名無しさん
2017/01/27(金) 12:55:33.52ID:2/l+3kL40370デフォルトの名無しさん
2017/01/27(金) 14:20:38.90ID:pYLJsuuuworksheetのchangeイベントかなんかでセルの値がかわったら罫線引くようにするしかないんじゃね
罫線の引き方はマクロの記録で調べなさいよ
0371デフォルトの名無しさん
2017/01/27(金) 19:39:13.72ID:2UbAAj3qPrivate 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
消すのは逆をすればいいんでない?
0372デフォルトの名無しさん
2017/01/27(金) 20:32:43.21ID:WmIjEyaD条件付き書式でいいだろ
って思ったら条件付き書式って斜め罫線ダメなんだな
他の罫線はいいのにちょっと不思議
なので 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
0373デフォルトの名無しさん
2017/01/27(金) 22:47:33.41ID:Fb1FgEo20374デフォルトの名無しさん
2017/01/27(金) 22:49:12.60ID:2UbAAj3qコード書きながらそう思ったよw
0375デフォルトの名無しさん
2017/01/28(土) 12:01:46.67ID:w/mx7yyO下記は調べたい書式のほんの一例です。実際に調べたい書式はもっとありますし将来的にもどんどん出てきます。
・文字列に、数字+"/"の数字を含む (例)予定は2/3
・文字列が、"平成"ではじまる (例)平成元年
・文字列に、2文字以上の空白を含む (例)I have a pen.
などなど
つまり正規表現のようなものをVBAのコードで使うときの定番ってなんでしょうか?
0376デフォルトの名無しさん
2017/01/28(土) 12:03:39.31ID:w/mx7yyOもっと短く一般的にできる方法はないかと思って。
0377デフォルトの名無しさん
2017/01/28(土) 12:07:32.57ID:BY939/WJ簡単なものなら Like演算子
本格的にやりたいなら正規表現オブジェクトを使う
正規表現オブジェクトは
"Microsoft VBScript Regular Expressions"を参照設定するか
Set RegExp = CreateObject("VBScript.RegExp")
0378デフォルトの名無しさん
2017/01/28(土) 12:21:25.10ID:w/mx7yyOなるほどLikeがござったか。ありがとう。
0379デフォルトの名無しさん
2017/01/28(土) 12:25:02.06ID:ktdFkm2m侍かな
0380デフォルトの名無しさん
2017/01/28(土) 12:27:02.94ID:w/mx7yyO0381デフォルトの名無しさん
2017/01/28(土) 12:42:49.48ID:9EkLNFiw0382デフォルトの名無しさん
2017/01/28(土) 21:50:14.17ID:d5Th95j2転職を考えているので、職場では自分だけが使うものしかマクロ化出来ない。
今のレベルの自分にオススメの書籍を教えて下さい。書店でじっくり探す時間が無いので。
今持ってるのは公式テキスト、「例題30問と演習70問でしっかり学ぶexcelVBA標準テキスト」です。
目標はぼんやりしているけど、こういうの作れない?と聞かれたら涼しい顔して作れるようになりたい。
0383デフォルトの名無しさん
2017/01/28(土) 22:22:23.13ID:F0MmKngEファウラーのリファクタリングあたりが脱初心者にオススメ
Javaで書かれてるけどVBAでも考え方は同じ
0384デフォルトの名無しさん
2017/01/28(土) 22:43:36.09ID:XFsAlNLB順番が逆なんだよ(システム屋は別だけど)
特に下っ端レベルだと、業務覚える→自動化考える→実装に必要な知識覚える。
これを繰り返すしかない
0385デフォルトの名無しさん
2017/01/28(土) 22:44:58.87ID:d5Th95j2ありがとうございます。
どちらも初めて聞いたのでググりました。
ファウラーのリファクタリング、本当に脱初心者って感じですね。何か重厚そうで少しビビります。
コードの良し悪しも、あまりにもひどいもの以外はよくわからないレベルなので
読んでみようと思います。
0386デフォルトの名無しさん
2017/01/28(土) 22:56:38.87ID:HZ4XiulJVBAで接続してそこからデータを持ってくるとかあるいはexcelのデータをテーブルに入れるとかさ。
知ってるんだったら良し、知らないんだったらフリーのRDBいっくらでもあるんだからそれ入れてADO勉強したら?
0387デフォルトの名無しさん
2017/01/28(土) 23:06:20.39ID:d5Th95j2業務覚える→自動化考える→知識覚える
これが一番なんですが、今の職場で人に影響が及ばない範囲で出来ることはやりきってしまったというか、大して出来ることが無いので。
経理の知識とVBAの知識両方で勝負したいとは思っているのですが
日商簿記2級とVBAスタンダード、どちらも中途半端過ぎて
今勉強するならどの方向かなと迷っているところです。
これ以上はスレ違いですが。
0388デフォルトの名無しさん
2017/01/28(土) 23:16:20.97ID:d5Th95j2よく知りません。
自分の今の状態、マクロの記録に毛が生えたくらいでこの数レスでもわからない単語が続出です。
ADO、フリーで使えるものが多いのは魅力です。ググってきます。
0389デフォルトの名無しさん
2017/01/28(土) 23:33:58.91ID:uAPjBDjx0390デフォルトの名無しさん
2017/01/29(日) 00:15:01.19ID:xYYwoQBZ扱うデータが多いと、SQLの知識も必要になる。
(処理速度的な理由で)
0391デフォルトの名無しさん
2017/01/29(日) 00:31:34.31ID:WKRhYkpmあとはselectだけだろ?
0392デフォルトの名無しさん
2017/01/29(日) 00:34:44.45ID:+blbXYZxその手の洪は楽しいよね
一冊くらいしか読んだこと無いけど
0393デフォルトの名無しさん
2017/01/29(日) 00:34:52.23ID:xgaFxxwc0394デフォルトの名無しさん
2017/01/29(日) 01:19:55.73ID:8UrWbtOI0395デフォルトの名無しさん
2017/01/29(日) 14:59:17.63ID:cSvePZMz0396デフォルトの名無しさん
2017/01/29(日) 15:22:05.76ID:M0HgmB1M普通は生産性の高い他の言語にシフトするよね
0397デフォルトの名無しさん
2017/01/29(日) 15:28:40.27ID:Gj2SxjJF0398デフォルトの名無しさん
2017/01/29(日) 15:53:56.99ID:M0HgmB1MVBAに執着する連中って視野が狭いから周り見えてないんだろうけど
0399デフォルトの名無しさん
2017/01/29(日) 16:40:53.45ID:WrrdSNFA0400デフォルトの名無しさん
2017/01/29(日) 16:57:33.53ID:cyG8RQu0「みんながみんなお前のようなマニアじゃねえんだよ」ってなもんで。去年、元SEでオラクル使いが
入社してきたがすぐに状況を察して「オレ、パソコン全然わかんない」とかトボケてやがるしw
0401デフォルトの名無しさん
2017/01/29(日) 16:59:25.83ID:xgaFxxwcえ?制約ってどんな?
馬鹿ばっかな上にこういう知ったかが出て来るクソスレは面白いな。
0402デフォルトの名無しさん
2017/01/29(日) 17:19:22.35ID:Urob8xZw型を指定できないとかじゃね?
関数も全部使えるのか知らないし
自作関数を使えたりするのかも知らない
0403デフォルトの名無しさん
2017/01/29(日) 18:01:06.86ID:cSvePZMzINSERTが不確実だとか読み込める行数に制限があるとか、
空白行が捕まえられないとかDELETE文が使えないとか、割とあるんだけど知らない?
実際にやってみればすぐ分かる事なんだけど、
ほとんどSELECT文しか使えないから手間に対して益が少ないんだよね。
0404デフォルトの名無しさん
2017/01/29(日) 18:09:45.36ID:JZZjSwEkそうだよね。
俺も SELECT 以外はダメだと思ってやめた。
単一オフィス内の事務だったらSQL Server Express で十分だし移行も簡単だと思う。
0405デフォルトの名無しさん
2017/01/29(日) 18:14:00.80ID:zuNgR2z5delete文も他も普通に使えるけど。
0406デフォルトの名無しさん
2017/01/29(日) 18:15:13.50ID:zuNgR2z50407デフォルトの名無しさん
2017/01/29(日) 18:39:53.21ID:M0HgmB1Mジャップにはよくある文化だね
頑張って追いつくより足引っ張って横並びになろうとする
0408デフォルトの名無しさん
2017/01/29(日) 18:50:33.75ID:Nv+lqz67馬鹿はこれだから。
全部できるだろうが。
お前の馬鹿頭ではできないだけ。
0409デフォルトの名無しさん
2017/01/29(日) 19:21:57.62ID:xNqGWhsyシートに対してのsqlなら
そうだけど。
言及対象あいまいすぎる。
0410デフォルトの名無しさん
2017/01/29(日) 19:32:30.38ID:6wGEJq5M引っ込みつかなくなる前にやめとけ
0411デフォルトの名無しさん
2017/01/29(日) 19:33:42.10ID:3OHjeGHP0412デフォルトの名無しさん
2017/01/29(日) 19:36:11.18ID:xYYwoQBZ0413デフォルトの名無しさん
2017/01/29(日) 19:55:32.59ID:8UrWbtOIというか、わざとやってるくさい
0414デフォルトの名無しさん
2017/01/29(日) 20:12:03.53ID:cyG8RQu0ウンコ臭いぞトンスラー、俺にすんじゃねえ
0415デフォルトの名無しさん
2017/01/29(日) 20:19:04.92ID:cSvePZMz外部のSQLを使えるソフトに繋ぐことが前提だったら、エクセルに依ったSQLの制限があると考える方がおかしいし、
そもそもADOがエクセルに対応しているのであってエクセルがSQLに対応してるわけじゃないんだから「エクセルのSQL」って言い回しにはならない。
0416デフォルトの名無しさん
2017/01/29(日) 20:36:29.34ID:xgaFxxwcADOも知らない馬鹿頭は黙ってろ
0417デフォルトの名無しさん
2017/01/29(日) 20:37:42.65ID:M0HgmB1M0418デフォルトの名無しさん
2017/01/29(日) 20:39:15.31ID:xgaFxxwcADOがExcelに対応してる?
馬鹿は死ねよ。
ADO使わずとも呼び出す方法もあるし、わからん奴が知ったかしてるんじゃねーよ。
お前の頭だからできないだけのことを製品のせいにすんな。
0419デフォルトの名無しさん
2017/01/29(日) 20:46:40.49ID:3OHjeGHPDriver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}
等した時に制約が多いって話だよな?
0420デフォルトの名無しさん
2017/01/29(日) 20:55:06.81ID:cSvePZMz無自覚に「エクセルからDBソフトに繋ぐ時はADOを使う」って前提に立ってたわ。
0421デフォルトの名無しさん
2017/01/29(日) 21:02:39.47ID:Urob8xZwこの環境だと色々制約があるんじゃね?
RDBMSを別に立てたらSQLの結果を受け取るだけだし
0422デフォルトの名無しさん
2017/01/29(日) 21:03:02.19ID:6wGEJq5Mめんどくせーなー
削除するコード書いてからほざけ
0423デフォルトの名無しさん
2017/01/29(日) 21:12:07.55ID:xSN3m+WXあ、ごめん
罵倒することでしかやりとりできないようなヤツとは関わらないって決めてるので誰にも迷惑のかからないところで勝手に盛り上がっててください
0424デフォルトの名無しさん
2017/01/29(日) 21:14:54.50ID:xNqGWhsyどうでも良いのに
答え求めてわらた
0425デフォルトの名無しさん
2017/01/29(日) 21:18:43.36ID:3OHjeGHPオッ
0426デフォルトの名無しさん
2017/01/29(日) 21:23:53.48ID:xgaFxxwc0427デフォルトの名無しさん
2017/01/29(日) 21:42:14.95ID:M0HgmB1M0428デフォルトの名無しさん
2017/01/29(日) 21:49:05.82ID:3OHjeGHPそれで会社として生き残っていけるんならさぞ余裕があるんだろう
...それとも沈みゆく泥舟なのか?
0429デフォルトの名無しさん
2017/01/29(日) 21:58:25.91ID:9pGSsNTY零細企業の大半はそんなもん
しかも日本に限らん
0430デフォルトの名無しさん
2017/01/29(日) 22:09:31.30ID:3OHjeGHPそこに力を入れてもビジネスチャンスには結びつかん、という判断なのかな
それならOfficeレベルより上は不要かも
0431デフォルトの名無しさん
2017/01/29(日) 22:40:41.68ID:h9OztPwg0432デフォルトの名無しさん
2017/01/29(日) 22:43:44.35ID:3OHjeGHP0433デフォルトの名無しさん
2017/01/29(日) 22:58:56.73ID:e2GiLXmEググって調べたらVBとかC#の情報だったけど、レジストリにWebBrowserControl.exeの名前で値追加する方法があったのでやってみたけど、
バージョン変わりませんでした。
VBAでは方法が違うんでしょうか?
0434デフォルトの名無しさん
2017/01/29(日) 23:05:16.84ID:e2GiLXmEありがとうございました
0435デフォルトの名無しさん
2017/01/29(日) 23:12:11.27ID:xNqGWhsy礼を言われるほどのことじゃないよ!
0436デフォルトの名無しさん
2017/01/30(月) 00:49:56.54ID:Evqo1D2G0437デフォルトの名無しさん
2017/01/30(月) 05:04:33.08ID:6lLneJEZ>>422
0438デフォルトの名無しさん
2017/01/30(月) 09:50:19.06ID:DMFEN635トラフィックエクスチェンジ
http://tra-chan.jugem.jp/?eid=1
0439デフォルトの名無しさん
2017/01/30(月) 16:25:14.09ID:F1tgy4u/0440デフォルトの名無しさん
2017/01/30(月) 18:29:00.85ID:mknZdUVz0441デフォルトの名無しさん
2017/01/30(月) 19:40:12.17ID:EbqBYLP70442デフォルトの名無しさん
2017/01/30(月) 20:12:58.87ID:dKn8bdISまあ、一般企業じゃないから(なんちゃら組合ってやつ)潰れる事はないだろうが、今時経理も帳簿と電卓、ボールペンだし
財務会計ソフトを導入したもののソフトに入力しながら電卓で検算してるしw
「コンピューターは信用できない」とか総務のお局様が言ってるからどうにもならん。
オレは自分の業務に使うものは自分でマクロ書いて定時で帰れるようにしてるが、他の連中は「画像3000枚に一つずつ!連番を振って
徹夜した」とか差し込み印刷を教えても「そんなズボラなやり方はダメだ」と言ってテンプレートに入力→印刷→テンプレートを初期化を200件朝までやってたとか
それが50代とかじゃなく30代のバリバリ中堅どころなんだから笑うしかねえわ
0443デフォルトの名無しさん
2017/01/30(月) 20:16:47.37ID:4xfdjQgw0444デフォルトの名無しさん
2017/01/30(月) 21:03:40.38ID:F1tgy4u/なるほど
でもそれだと“[”を含む、しかできなくない?
まあ詳しく調べるならInStr使えばいいんだけどさw
0445デフォルトの名無しさん
2017/01/30(月) 21:14:54.19ID:QDHU/4vl私も定時で帰る手段としてのプログラミング同感
今時、できの悪い奴らの根性語り、、恥ずくないのか!w
0446デフォルトの名無しさん
2017/01/30(月) 21:19:02.65ID:EeAzQJfr0447デフォルトの名無しさん
2017/01/30(月) 21:39:41.37ID:dJWPhbF6全体的な学力の低下の影響で応用の利かないバカはむしろ増えてる
0448デフォルトの名無しさん
2017/01/30(月) 21:42:30.27ID:UfG8r5Q5学歴高くても頭使わないやつが多すぎる
0449デフォルトの名無しさん
2017/01/30(月) 22:05:07.29ID:gqMuGKk30450デフォルトの名無しさん
2017/01/30(月) 22:34:24.19ID:DRq3TNDG0451デフォルトの名無しさん
2017/01/30(月) 23:59:13.06ID:pve8veDd能力ひけらかすより足並み揃えて今の仕事をやりすぎずサボりすぎずぐらいに維持する方が全体の利益になるんだよ
0452デフォルトの名無しさん
2017/01/31(火) 00:10:36.51ID:W4oCxLcQ0453デフォルトの名無しさん
2017/01/31(火) 04:45:25.89ID:7lVbi0HF全体の利益になるの全体ってどの範囲
自分?自チーム?自部門?自社?自事業界?
海外も含めて考慮すると?
0454デフォルトの名無しさん
2017/01/31(火) 14:09:13.37ID:W2MQjnqiその先はどっちでも不利益になるわけでなし
0455デフォルトの名無しさん
2017/02/01(水) 21:42:36.25ID:UlFFF3K3馬鹿馬鹿言ってる無教養者が踊っててワロタw
いやー、多分EXCELのシートやCSVファイルにSQL投げたことないんだろうね。
0456デフォルトの名無しさん
2017/02/01(水) 21:51:20.22ID:PbjZqAWj0457デフォルトの名無しさん
2017/02/01(水) 22:06:49.07ID:TAfVniq50458デフォルトの名無しさん
2017/02/01(水) 23:10:08.02ID:YqrNMNH40459デフォルトの名無しさん
2017/02/02(木) 00:50:04.16ID:26wow3Y80460デフォルトの名無しさん
2017/02/02(木) 06:35:42.81ID:oZoqJ5pi今のところ主要な数値を無効な値へUPDATEするくらいしか有効な手段がないんだよね。
0461デフォルトの名無しさん
2017/02/02(木) 07:39:32.18ID:eC+H4ibC0462デフォルトの名無しさん
2017/02/02(木) 08:08:18.85ID:mHe9v9aTこの人バカじゃん
0463デフォルトの名無しさん
2017/02/02(木) 08:40:21.34ID:6HuXGQiF0464デフォルトの名無しさん
2017/02/02(木) 10:49:25.90ID:/oce7NjAどういう方法でやってダメだった?
自分は素のODBCでやってダメだったけどADOは知らず。
0465デフォルトの名無しさん
2017/02/02(木) 18:21:07.45ID:qO0hDPsp0466デフォルトの名無しさん
2017/02/02(木) 18:21:37.93ID:ZUZ0NvC+シートに数万行って重いだけだし恐らく使い方間違ってるよ
0467デフォルトの名無しさん
2017/02/02(木) 18:31:42.95ID:aDxFABtY色々と制約があるんじゃね
0468デフォルトの名無しさん
2017/02/02(木) 18:39:17.04ID:OxqW0VIphttps://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 ブックをデータベースとして扱う場合に固有です。
0469デフォルトの名無しさん
2017/02/02(木) 18:47:16.11ID:26wow3Y8制約なんかねーよ
0470デフォルトの名無しさん
2017/02/02(木) 18:51:25.47ID:aDxFABtYなんで他の職場環境の事を断言できるんだw
0471デフォルトの名無しさん
2017/02/02(木) 19:03:14.33ID:26wow3Y8ああ、ソフト的ではなく環境的にということね
0472デフォルトの名無しさん
2017/02/02(木) 19:37:44.37ID:NSv6UvRaわざわざエクセルをDBに使うなんてそういうことやろ
0473デフォルトの名無しさん
2017/02/02(木) 19:45:16.92ID:26wow3Y8daoを使えばできるのに使えない人じゃないか?
0474デフォルトの名無しさん
2017/02/02(木) 19:50:07.70ID:/oce7NjA「いますぐマスターすべきExcelシートにDELETE文を発行する10の方法」
という記事をQIITAに書け。
0475デフォルトの名無しさん
2017/02/02(木) 20:02:10.03ID:oZoqJ5piAccessその他のDBソフトに繋いで利用する方法は知らない」
ってどんな確率だよ。
0476デフォルトの名無しさん
2017/02/02(木) 20:07:41.61ID:/oce7NjAそうだなあ、、、
・エクセルしかない環境
とか、
・データ入力者は別にいて、そいつがエクセルしか使わない
とか?
0477デフォルトの名無しさん
2017/02/02(木) 20:15:04.31ID:bpSSgRJM>>468によれば、Microsoft.Jet.OLEDB.4.0では削除できないみたいだけど
出来るって言ってるやつも出来ないって言ってるやつも、ドライバ(プロパイダ)明示しろや
0478デフォルトの名無しさん
2017/02/02(木) 21:51:23.00ID:TcNEtgX90479デフォルトの名無しさん
2017/02/02(木) 23:04:57.75ID:JuktWcDi完全にエクセルでDBの方がバカなんだけど
もしかしてExcel VBAでAccess使っちゃダメみたいなローカルルールがあんの?
0480デフォルトの名無しさん
2017/02/02(木) 23:41:12.27ID:yoXwSHRoa1セルからデータ始まってない場合とかどうすんだ?
表形式ですらない場合のほうが多いし
0481デフォルトの名無しさん
2017/02/03(金) 04:47:43.76ID:OWBaaXVbDELETEさえ使えればエクセル単体でDB処理が完結するから便利なんだよ。
これ一つ使えないせいで仕方なく外部のDB使ってる場合が多いと思う。
発想が逆というか、話の前提条件というか。
まぁ、そもそも出来ない事を出来ると主張した奴が悪いんだけどね。
0482デフォルトの名無しさん
2017/02/03(金) 07:06:56.58ID:XP7JqKvcexcelだけでやることに意味があることもおおいだろ
少しは頭使え
0483デフォルトの名無しさん
2017/02/03(金) 07:18:59.91ID:2s9sq5BM0484デフォルトの名無しさん
2017/02/03(金) 08:15:27.01ID:Ibd8YbHy普通の会社なら Excel が入っていない PC は滅多にないけど Access が入ってないことはよくある
0485デフォルトの名無しさん
2017/02/03(金) 08:17:25.72ID:6hF18qg4>>480
できるようにしろよ
お前は雛かw
0486デフォルトの名無しさん
2017/02/03(金) 08:18:24.35ID:jCN45Z8Mだよね
うちも情シス課だけだ
0487デフォルトの名無しさん
2017/02/03(金) 10:15:04.35ID:jamIg+V10488デフォルトの名無しさん
2017/02/03(金) 22:34:23.19ID:zw5JONDs実は問題ない。
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で余計なところを消してもいい。
0489デフォルトの名無しさん
2017/02/04(土) 00:03:57.13ID:L9lbN/6P何とかならんだろうか。
10個あったら60行っすよ。
0490デフォルトの名無しさん
2017/02/04(土) 00:23:48.42ID:IKUGnnqZIFで指定した列が表示が表示されてるならValueをTrue(押されてる状態)にするという処理を書いています
その後の処理のためにイベントプロージャーで、トグルボタンをクリックすると列の表示、非表示を指定できるようにしていますが、最初のIF文でもイベントプロージャーを実行してしまいます
何か回避策ありませんか?
0491デフォルトの名無しさん
2017/02/04(土) 01:50:33.82ID:DTJgp/8VLet Get合わせて最低2行だろjk
0492デフォルトの名無しさん
2017/02/04(土) 01:52:48.86ID:keYK1J0lなんちゃらEnableみたいなのがあったけど思いだせん
自分でぐぐってくれ
0493デフォルトの名無しさん
2017/02/04(土) 03:27:18.53ID:DTJgp/8Vイベントを禁止できないけど こうゆうのどう?
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
0494デフォルトの名無しさん
2017/02/04(土) 05:14:57.71ID:XGGN10p2OracleDBのテーブルにあるCLOBフィールドに格納
されたExcelファイルにアクセスしてReadOnlyで開くか
ダウンロードするかしたいと考えています。
テーブル仕様書を見ると、CLOBにXMLTypeで格納され
ているとあります。
DBMS_LOB.SubStr()でVARCHAR2に変換して
先頭数文字取得しようとするのですがエラーでこけます。
GGって良い事例がないか捜しているのですがうまく見つけ
られません。VBAで可能でしょうか?
ODBC(Excel Driver)またはOraDynasetは利用できる
環境にあります。
0495デフォルトの名無しさん
2017/02/04(土) 11:23:15.74ID:R/BCzGYYアクセサ云々より先に継承だからなあ
0496デフォルトの名無しさん
2017/02/04(土) 11:37:21.42ID:O5nNdZ1Mたくさんあったら使う側も面倒なんだからひとつのメソッドで同時に設定すればいいんじゃない?
相互依存のない独立したプロパティが10個あるクラスだとしたら設計がまずいか、相当なレアケースのどちらか。
0497デフォルトの名無しさん
2017/02/04(土) 12:40:09.24ID:pgmrL8Re改行しないで二行でかけ
0498デフォルトの名無しさん
2017/02/04(土) 13:20:38.95ID:R/BCzGYY0499デフォルトの名無しさん
2017/02/04(土) 15:59:29.14ID:4MwsZCTu一つ目の画像を縦横の短い長さでクロップしたいのですが
どこがまちがっているのでしょうか
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
0500デフォルトの名無しさん
2017/02/04(土) 17:00:11.13ID:OKds5wOX文字コードじゃなくて?
0501デフォルトの名無しさん
2017/02/04(土) 19:06:45.66ID:L9lbN/6P>>497
>>498
Property Let
内容
End Property
Property Get
内容
End Property
ググっても、こういう書き方しか見つからない・・・。
>>496
クラス.名前
クラス.部署
クラス.年齢
クラス.性別
・
・
的な使い方をしたいんだけど、変?
0502デフォルトの名無しさん
2017/02/04(土) 19:11:21.46ID:hnMbbMl2Property Let : {...} : End Property
って書き方でしょ。
どっちにしろ単純なメンバー変数の読み書きをいちいちメソッド化してもなぁ。
0503デフォルトの名無しさん
2017/02/04(土) 19:35:42.95ID:ypmLJyxSC#使いなよ
0504デフォルトの名無しさん
2017/02/04(土) 19:55:29.16ID:nIvSnu1nletもgetもあるなら、クラスの中にpublic変数作った方が良い。
隠蔽的にはなんの役にも立たないけど。
0505デフォルトの名無しさん
2017/02/04(土) 20:04:50.83ID:R/BCzGYY変数の初期値設定とかでもよくやるけど
Dim c as class1:set c=new class1
とかね
0506デフォルトの名無しさん
2017/02/04(土) 20:17:51.11ID:L9lbN/6P目から鱗。
コロンは知ってたけど、まさか最初と最後にも使えるとは思わなかった。
ありがとう。
0507デフォルトの名無しさん
2017/02/04(土) 20:42:11.57ID:pJMir97a> Dim c as class1:set c=new class1
そのパターンは
Dim c As New class1
でよくね?
0508デフォルトの名無しさん
2017/02/04(土) 20:55:01.33ID:O5nNdZ1Mいいと思うけどなぜか嫌う人もいる
0509デフォルトの名無しさん
2017/02/04(土) 20:57:38.63ID:TSeQ29q+0510デフォルトの名無しさん
2017/02/04(土) 21:02:39.21ID:O5nNdZ1Mhttps://msdn.microsoft.com/ja-jp/library/dd297716.aspx
0511デフォルトの名無しさん
2017/02/04(土) 21:17:54.19ID:O5nNdZ1M宣言と同時に初期化(≠代入)したい、ってことでしょ
0512デフォルトの名無しさん
2017/02/04(土) 21:49:00.67ID:pJMir97aほえー、これは知らんかったわ
なんでこんな凝ったことするかねぇ...
0513デフォルトの名無しさん
2017/02/04(土) 22:12:26.08ID:R/BCzGYYもう出てるけどコンストラクタが働かない
0514デフォルトの名無しさん
2017/02/05(日) 10:29:00.78ID:7v2W1cWr多分この仕様のせいかと
https://msdn.microsoft.com/ja-jp/library/office/ff838027.aspx
>トリミングは、元の図の大きさを基に計算されます。
>たとえば、元の図が高さ 100 ポイントの場合に、それを 200 ポイントに変更して、
>CropBottom プロパティに 50 を設定すると、
>図の下端からトリミングされるのは 50 ポイントではなく 100 ポイントとなります。
だから↓のような処理にすればよくね?
現在のサイズを保存 → オリジナルサイズに戻す → Crop → Cropしてない方のサイズに戻す
0515デフォルトの名無しさん
2017/02/05(日) 18:56:44.11ID:qj78kXRnありがとうございます 一発で解決しました
変な仕様だとおもったけど拡大縮小を考えたら
こっちのほうが誤差がでなくて使いまわしがいいのかも
0516デフォルトの名無しさん
2017/02/06(月) 12:18:45.75ID:Xnyr5yqpありがとうございます!
無事想定通りに動きました!
0517デフォルトの名無しさん
2017/02/06(月) 15:58:56.02ID:6lEgfPNZ0518デフォルトの名無しさん
2017/02/07(火) 21:15:01.23ID:0h02j8pV簡易CTIをエクセルで作りたいと思ってます
パソコンに繋いでいるfomaの着信を拾って相手の発信番号を取得するにはどうすれば良いでしょうか?
com3ポートに認識されていたのでterateamで接続しATコマンドでの発着信はできました
vbaでの操作ではCOMポートにATコマンドを入力して発信はできました
なんとか自力でココまで調べましたが、肝心の着信を拾う方法が一向に分かりません•••
何方か教えて頂けませんでしょうか
0519デフォルトの名無しさん
2017/02/07(火) 21:26:24.63ID:obnTOw8Yできるなら俺も教えてほしい
煽りとかじゃなくて
0520デフォルトの名無しさん
2017/02/07(火) 21:33:09.15ID:71skcbUj232Cアナライザーでどんな通信してるかバイパスして見るとかいう手もある
http://www.fullfree.jp/i/cti/%E6%90%BA%E5%B8%AF%E9%9B%BB%E8%A9%B1/
対象機器なら ↑ こういう手もあるかも
0521デフォルトの名無しさん
2017/02/07(火) 21:45:01.70ID:K6SNK3fF0522デフォルトの名無しさん
2017/02/07(火) 22:41:07.72ID:4GsqGq1Tしかし起動時に勝手に計算してしまうことがあります。(計算されないこともある)原因がわかる方がいたら教えてください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
0523デフォルトの名無しさん
2017/02/07(火) 22:42:44.62ID:4GsqGq1TEXCEL2007 windows7です。
0524デフォルトの名無しさん
2017/02/07(火) 22:47:36.56ID:vzZ8DTGh数式再計算を止める
Application.Calculation = xlCalculationManual
Application.Calculation = xlCalculationAutomatic
「.Calculation」と「.EnableCalculation」のどちらが効果的か
http://stabucky.com/wp/archives/6840
.EnableCalculationってのは初めて知ったw
0525デフォルトの名無しさん
2017/02/07(火) 22:49:15.03ID:0h02j8pVfullfreeは試しに使って見ました
通知も上手く動くので大変良いのですが、本格的に使うには有料版を買わなきゃいけないのです•••
VB.netで似たようなものなら作れるのかな
0526デフォルトの名無しさん
2017/02/07(火) 22:56:00.49ID:kg1BFKbjファイル名 ドキュメントの種類 計算方法
------------------------------------------------------
Auto1.xls Workbook 自動
Manual1.xls Workbook 手動
Auto2.xls Workbook 自動
Excel の計算方法は、次の各条件を適用して決定されます。
最初に開かれるドキュメントでは、そのドキュメントで最後に保存された計算方法が使用されます。以降に開かれるドキュメントでは、同じ計算方法が使用されます。
たとえば、Auto1.xls を開いてから Manual1.xls を開く場合は、両方のドキュメントで自動の計算方法 (Auto1.xls で使用されていた計算方法) が使用されます。Manual1.xls を開いてから Auto1.xls を開く場合は、両方のドキュメントで手動の計算方法が使用されます。
事前に何かのブックを開いている…ってのはないのかな
0527デフォルトの名無しさん
2017/02/07(火) 22:57:33.27ID:4GsqGq1T回答ありがとうございます。
前はそっちでやってたんですけど、結果は同じでした。
それにexcel自体を全て手動計算にしている状態で別のexcelファイルを開くと、後から開いたEXCELファイルも手動になってしまうので、それは辞めました。
アクティブ状態のとき手動計算。非アクティブのとき自動計算にするっていう感じでごまかしていたんてすけど、それでも他のファイルがアクティブのときは重くなってしまうのでエクセル全体の手動計算化は諦めたんです。
0528デフォルトの名無しさん
2017/02/07(火) 23:13:44.54ID:4GsqGq1Tそれもあり得ると思ってそのファイル以外は開かないようにしていろいろ試しているんですけど、たまに起動時に自動計算してしまいます。
上記の再計算マクロを実行したときに、次回起動時に再計算されることが多い気がします。
あと変わったことといえば、保存時にバックアップファイルを作成すると、読み取り専用で開くを推奨するにチェックを入れてます。
0529デフォルトの名無しさん
2017/02/07(火) 23:22:48.13ID:diTiDCUQどう繋いでるのか知らんけど
AT+CMR=3,0,0,1,0
で非請求リザルトコードを送出するようにして
AT+CLIP=1
で相手先の番号通知をするようにしておけば電話がかかってきたらリザルトコードと電話番号が送られてくるはず
https://www.nttdocomo.co.jp/binary/pdf/corporate/technology/document/foma/foma8.pdf
0530デフォルトの名無しさん
2017/02/08(水) 00:37:33.33ID:ZVPHpwbPZolls(4,2).Value= "あ"
みたいな。
何でかというと、サム(SUM)も、ザム(ZAM)にしたほうがカッコイイからです。
なので、LEN→ZEN、LEFT→LEVT、IF→IVEに直ることを望みます。
0531デフォルトの名無しさん
2017/02/08(水) 00:44:56.28ID:JHaqns+X何でかというと、SUM(和)も、動きと意味を同じにしているからです。
0532デフォルトの名無しさん
2017/02/08(水) 01:23:44.42ID:gxc/oAA10533デフォルトの名無しさん
2017/02/08(水) 12:32:13.51ID:YRaicT0y前向きに善処します
0534デフォルトの名無しさん
2017/02/08(水) 15:05:50.71ID:jpNr2q1tだからやめて欲しい
何度説明読んでも覚えられない
0535デフォルトの名無しさん
2017/02/08(水) 16:01:16.01ID:GSna8PfoSUMPRODUCT っていう名前の事? 機能の事? どっちを言ってる?
機能の事なら覚えるしかないけど
名前の事なら
VBEのインテリジェンス や 数式オートコンプリートで候補表示されるがな
0536デフォルトの名無しさん
2017/02/08(水) 17:02:26.93ID:jpNr2q1t0537デフォルトの名無しさん
2017/02/08(水) 17:26:17.93ID:G5M1Oque0538デフォルトの名無しさん
2017/02/08(水) 20:23:45.21ID:PsLw780Zインテリセンスな
0539デフォルトの名無しさん
2017/02/08(水) 20:28:50.62ID:xdFvHyj9そういう英単語はないのですが。
0540デフォルトの名無しさん
2017/02/08(水) 20:31:43.60ID:ahyxJIg+インゲマルセンス
0541デフォルトの名無しさん
2017/02/08(水) 20:35:58.20ID:YRaicT0yそんなに馬鹿をご披露しなくても。
見ててしんどすぎるw
0542デフォルトの名無しさん
2017/02/08(水) 20:36:09.45ID:KwXJn1Y4辞典に載ってる
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
0543デフォルトの名無しさん
2017/02/08(水) 21:17:52.74ID:J3ugy/jRそうだな。INNERPRODUCTって名前にすべきではあるな。
0544デフォルトの名無しさん
2017/02/08(水) 21:18:25.45ID:J3ugy/jR>>534
0545デフォルトの名無しさん
2017/02/08(水) 22:10:27.54ID:ycePkqqkLEN→文字数
LEFT→左
SUM→和
SUMPRODUCT→積の和
0546デフォルトの名無しさん
2017/02/08(水) 22:42:52.80ID:2zqqayOY0547デフォルトの名無しさん
2017/02/08(水) 22:47:04.89ID:DZJYY/gu・空白
・日付 例: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列以外を誤って選択した場合、実行をキャンセルする
空白もしくは日付データのセルを誤って選択した場合スキップする
という条件が未設定なわけですが
初心者のため、やり方が解りません
何卒ご教授お願いします
0548デフォルトの名無しさん
2017/02/08(水) 22:55:24.84ID:PsLw780ZSub 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
0549デフォルトの名無しさん
2017/02/08(水) 23:32:27.61ID:DZJYY/gu日付チェックは難しそうなのでパスしました
列チェック、ブランクチェックはOK
0550デフォルトの名無しさん
2017/02/08(水) 23:43:38.04ID:G5M1Oqueデータ左端の文字が英文字の場合のみ処理すればよい
0551デフォルトの名無しさん
2017/02/08(水) 23:56:03.18ID:ZVPHpwbPクラスモジュールでプロパティゲトォした値を入れると、遅くなりますか?
(1ループ毎にゲトォしやがりますか?)
普通の変数の方がいい?
0552デフォルトの名無しさん
2017/02/08(水) 23:57:41.36ID:2zqqayOYA1に 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
目的に応じて。
0553デフォルトの名無しさん
2017/02/09(木) 08:11:20.26ID:qBnVMkljそれぐらい自分で試せるでしょ
0554デフォルトの名無しさん
2017/02/09(木) 09:20:05.90ID:kHCI6X3g速いは遅いは
そりゃ偉い騒ぎよ
0555デフォルトの名無しさん
2017/02/09(木) 12:46:25.09ID:vKLMa/HOご教授願えませんでしょうか...
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
0556デフォルトの名無しさん
2017/02/09(木) 12:48:49.77ID:hH4J/ks8○ご教示
0557デフォルトの名無しさん
2017/02/09(木) 12:54:24.78ID:f2wLu3Eu0558デフォルトの名無しさん
2017/02/09(木) 12:54:36.06ID:vKLMa/HO0559デフォルトの名無しさん
2017/02/09(木) 13:03:15.06ID:0S6dEfQx本来のやりたい事がようわからんが ありがちな事として
Row(行) と Column(列)を 勘違いしてるとか
ActiveSheetの内容と欲しい結果を具体例で上げてみて
0560デフォルトの名無しさん
2017/02/09(木) 13:25:47.81ID:WkR93Ch5なら2回コピペ
0561デフォルトの名無しさん
2017/02/09(木) 13:43:10.76ID:vKLMa/HO一件2回コピペで終わるんですが、数があるのと、元のリストを整備しておけば簡単に作り直せるようにしたいので。
0562デフォルトの名無しさん
2017/02/09(木) 14:01:19.23ID:0S6dEfQxこれだと どうかな? (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
0563デフォルトの名無しさん
2017/02/09(木) 14:01:32.78ID:e5heueGcSub 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
こんなんでいいの?
0564デフォルトの名無しさん
2017/02/10(金) 06:41:47.39ID:C/dUqapt書式必要じゃないなら
Dim v as variant
v = range(範囲)
貼り付け先 = v
ってした方が早いんじゃないかな
書式必要だとしても、形式が決まってるならあとから直接指定した方がコピペするより早いと思う
クリップボード経由する分コピペだと遅いはず
0565デフォルトの名無しさん
2017/02/10(金) 07:18:27.18ID:C/dUqapt細かいこと言うと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
0566デフォルトの名無しさん
2017/02/10(金) 07:23:40.57ID:C/dUqaptまあ、同じ要領で
0568デフォルトの名無しさん
2017/02/10(金) 18:30:23.86ID:n+qIsj3QVBAの勉強がんばります・・・
0569デフォルトの名無しさん
2017/02/10(金) 18:45:27.09ID:iQHACvfgちゃんと速度は計れよ
0570デフォルトの名無しさん
2017/02/10(金) 20:51:56.75ID:FEKvr519BookBに「仮シート」という名前のシートがあり、
そこにAのsheet1のA1〜B2のデータをコピーして、
仮シートのC1にコピーするにはどういうコードを書けば良いでしょうか?
Workbook("BookA").Activate
Worksheet("Sheet1").Activate
Range("A1:B2").copy(Workbooks("BookB").Range(C1))
これでは動かなかったです。
基本的なことですが、教えてくれると助かります。
0571デフォルトの名無しさん
2017/02/10(金) 20:57:35.59ID:FEKvr519Workbook("BookA").Activate
Worksheet("Sheet1").Activate
Range("A1:B2").copy(Workbooks("BookB").Worksheets("仮シート").Range(C1))
これでは動かなかったです・・。
0572デフォルトの名無しさん
2017/02/10(金) 20:57:57.50ID:uU6WR+pHWindows("BookA.xlsx").Activate
Sheets("Sheet1").Select
Range("A1:B2").Select
Selection.Copy
Windows("BookB.xlsx").Activate
Sheets("仮シート").Select
Range("C1").Select
ActiveSheet.Paste
0573デフォルトの名無しさん
2017/02/10(金) 20:59:28.26ID:FEKvr519おぉ、こんな早いレスありがとうございます!
さっそく試してみます!
0574デフォルトの名無しさん
2017/02/10(金) 21:08:21.59ID:FEKvr519一行目のxlsxって入れると、インデックスが有効でありませんって出ます。
このxlsxを抜くと動くんですけど、これは抜いてもいいんですか?
0575デフォルトの名無しさん
2017/02/10(金) 21:30:28.00ID:FEKvr519xlsxがなければアクティブになるのですが・。
0576デフォルトの名無しさん
2017/02/10(金) 21:59:49.57ID:0WSFnPb10577デフォルトの名無しさん
2017/02/10(金) 22:33:27.68ID:O1yyuw9vファイルが存在してない(bookAを保存してない)
xlsで保存してる
そもそも開いてない
どれか
0578デフォルトの名無しさん
2017/02/10(金) 22:43:44.52ID:Tmi1uInj0579デフォルトの名無しさん
2017/02/10(金) 22:52:11.64ID:O1yyuw9v今はおとなしく負けてろ
次に勝てばいい
0580デフォルトの名無しさん
2017/02/10(金) 22:55:49.26ID:Tmi1uInjふ、いつでも次があると思うなよ
0581デフォルトの名無しさん
2017/02/10(金) 22:59:43.13ID:O1yyuw9vいつまでも、な
俺は常に次を作り出せるので気にしない
いつまでも誰かから機会をもらえると思うなよ
0582デフォルトの名無しさん
2017/02/10(金) 23:06:57.39ID:Tmi1uInjだから無いって言ってるだろ
ややこしい奴だなお前w
0583デフォルトの名無しさん
2017/02/10(金) 23:12:17.61ID:XPfR8Ri8駄目です❗
0584デフォルトの名無しさん
2017/02/10(金) 23:22:18.55ID:eMOKhTfCどの辺までいけますか?
バーチャファイター2は作れる?
0585デフォルトの名無しさん
2017/02/10(金) 23:32:35.61ID:X8zCTp9W絵が描ける
0586デフォルトの名無しさん
2017/02/10(金) 23:40:27.15ID:eMOKhTfC0587デフォルトの名無しさん
2017/02/10(金) 23:41:38.00ID:XPfR8Ri84まで行ける
0588デフォルトの名無しさん
2017/02/10(金) 23:45:26.17ID:Y+gj7rLy0589デフォルトの名無しさん
2017/02/10(金) 23:56:37.09ID:6UihQBZT0590デフォルトの名無しさん
2017/02/11(土) 01:21:11.41ID:DxY/TAwg0591デフォルトの名無しさん
2017/02/11(土) 02:17:03.74ID:WAY5pSrp売り上げたけど何か聞きたいことはある?」回答いろいろ
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
0592デフォルトの名無しさん
2017/02/11(土) 08:56:45.70ID:81NKiA7R週刊誌に載ってるような程度の詰将棋が解ける
0593デフォルトの名無しさん
2017/02/11(土) 13:44:07.84ID:WeBIHJYm>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について言えば、実際のブック名(ファイル名)はどうなってるの?
タイトルに書かれてる奴は?
ファイルに保存したことが無ければ当然拡張子は付いてない。
0594デフォルトの名無しさん
2017/02/11(土) 17:37:07.32ID:y7jIVWYW0595デフォルトの名無しさん
2017/02/11(土) 17:51:11.27ID:QMyG+xERコピー元のセルの結合を解除し、データを削除できますか?
(要はカットペースト)
任意のセルをコピーをして
Sub paste()
Selection.PasteSpecial paste:=xlPasteValues
Selection.PasteSpecial paste:=xlPasteFormats
End Sub
で、別のセルに貼り付けまではできるのですが
コピー元のセルの削除ができません。
0596デフォルトの名無しさん
2017/02/11(土) 17:58:36.30ID:2rQZT4wf0597595
2017/02/11(土) 18:06:37.00ID:QMyG+xER例えばA1からA3までが結合されていてそれをコピー
それをA5に貼り付けて
A1からA3は結合は解除されデータも削除したいのです。
0598デフォルトの名無しさん
2017/02/11(土) 18:21:40.18ID:2rQZT4wfカットして、貼り付け先決めてペースト
0600デフォルトの名無しさん
2017/02/11(土) 18:33:55.38ID:DSeAMe3p普通に
コピー元.MergeCells = False
コピー元.ClearContents
ではないの?
0601595
2017/02/11(土) 19:36:29.77ID:QMyG+xERコピー元はA1:A3だったりA5:A8だったりと想定していまして
コピー元をRange("A1:A3")と指定できないです。
0602デフォルトの名無しさん
2017/02/11(土) 19:38:42.10ID:DVczqHH+変数宣言とメッセージボックスはなんとなくわかったのですが、IF文とかFor文とかわけわかりません
0603デフォルトの名無しさん
2017/02/11(土) 19:44:43.18ID:j9jl8H+00604デフォルトの名無しさん
2017/02/11(土) 19:52:41.68ID:P1k0UnFVこうゆうのどう?
コピー元を選択してから
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
0605デフォルトの名無しさん
2017/02/11(土) 19:59:15.77ID:3aCh2hRF文系のおっさんだけどやってますよ
VBA始めたのも仕事ってことはあるけどExcel2000の頃からだしww
0606デフォルトの名無しさん
2017/02/11(土) 20:10:03.75ID:Yn1WOs8Zじゃ無理です
0607デフォルトの名無しさん
2017/02/11(土) 20:12:18.13ID:eIU/UKQLVBAでやる場合Range(Cells(fromRow,fromCol),Cells(toRow,toColl))みたいに書く方が好き
0608595
2017/02/11(土) 20:30:29.51ID:QMyG+xERありがとうございます。
コピー先にセルが結合していた場合のエラー回避を入れて
想定したものができました!!
0609デフォルトの名無しさん
2017/02/11(土) 21:01:37.06ID:vSETvneWIF文がわからない??
0610デフォルトの名無しさん
2017/02/11(土) 21:06:45.55ID:eIU/UKQL英語読めんだろ
VBAなんて中学生でも出来るよ
0611デフォルトの名無しさん
2017/02/11(土) 21:12:11.94ID:77uNpaEc単語の意味なんて別に知らなくても使える
0612デフォルトの名無しさん
2017/02/11(土) 21:34:52.33ID:DSeAMe3pセルの結合の解除やデータ削除の仕方がわからないんじゃなくて
コピー元範囲を変数にセットしといて後で参照する方法がわかなかった、ということか。
最初の質問の仕方がちょっとまずいよ。
0613デフォルトの名無しさん
2017/02/11(土) 22:19:45.12ID:5OICUox80614デフォルトの名無しさん
2017/02/11(土) 22:47:58.77ID:DSeAMe3p?
0615デフォルトの名無しさん
2017/02/11(土) 23:33:24.29ID:5OICUox8ああすまん言葉が足りなかったな
自分の無能を質問した側のせいにする馬鹿にはうんざりしてる
これで通じるかな?
0616デフォルトの名無しさん
2017/02/11(土) 23:37:46.17ID:DSeAMe3p?
>>595 はなんだったのか ?
0617デフォルトの名無しさん
2017/02/11(土) 23:50:57.08ID:5OICUox8知るかよ
俺が知ってる事と謂えば
俺が質問の意図を理解できないのは俺が無能だから
俺が答えられないのは俺が無能だから
悪いのは質問する側でなく俺自身の頭だということだけだ
0618デフォルトの名無しさん
2017/02/11(土) 23:54:08.79ID:uIilAFVC同意
0619デフォルトの名無しさん
2017/02/12(日) 00:18:43.15ID:GCBuHwjBカッカすんなよ
0620デフォルトの名無しさん
2017/02/12(日) 01:27:22.72ID:f71yA8WT有能な者は無能を見たら視線を逸らせてゆっくりと後ずさってゆく
自分が無能だと理解できたものは幸せである 望む高みを目指す機会を得られたのだから
自分を無能だと指摘してくれる他人がいるものは幸いである その意見に反駁する機会を得られたのだから
アーメン
0621デフォルトの名無しさん
2017/02/12(日) 07:21:34.46ID:Fy2fTJRT0622デフォルトの名無しさん
2017/02/12(日) 07:26:15.58ID:SthYlIVq0623デフォルトの名無しさん
2017/02/12(日) 07:57:58.77ID:lGLkKgIWそもそもこうやった方が良いよって間接的な解決法を回答すると
自尊心を傷つけられるのか回答になってない!って必ず激怒するね
0624デフォルトの名無しさん
2017/02/12(日) 10:05:43.63ID:SthYlIVq0625デフォルトの名無しさん
2017/02/12(日) 11:11:19.80ID:LExlgtgk質問スレは利用しないという大前提が、みんなわかってませんね
言葉のキャッチボールをしながら疑問の核心を引き出すのが良い回答者ですよ
0626デフォルトの名無しさん
2017/02/12(日) 11:16:08.28ID:v4isfS8N良い回答者は金もらえないのにメリットあるの?
0627デフォルトの名無しさん
2017/02/12(日) 11:25:53.43ID:tcfS8y3+0628デフォルトの名無しさん
2017/02/12(日) 11:29:40.27ID:v4isfS8N悪い回答者は自分の価値観で回答してるから回答する事が目的なんじゃね
良い回答者と言うのは質問者の価値観での良いという評価に過ぎない
自分の価値観と違う回答をするのは自分の目的とは違うんじゃね
金もらわないとバランス取れない
0629デフォルトの名無しさん
2017/02/12(日) 11:31:37.18ID:+/9Wo75iもっと核心的な大前提忘れてるぜ
どのスレでもそうだけど 回答者のボランティアで自己満足だけよ メリットは
だから良い回答者になってもいいし ならなくてもいい
ようは 質問者の問題が解決しようがしまいが 自己満足できりゃいいのよ
0630デフォルトの名無しさん
2017/02/12(日) 11:38:27.43ID:oqB84mjV0631デフォルトの名無しさん
2017/02/12(日) 11:57:11.30ID:uMNKLmCGそれが分かってるから回答者は直接的な回答をしない。
1.ピタゴラスイッチ的に動くかもしれんが絶対後で問題になるだろってのに頑張って回答しても、結局問題になって後々全然別の回答をしなければならなくなり、最初の回答が無駄になる。
2.直接的な回答を希望する奴はそれがどういう仕組みで動いてるかを自分のものにしないからしばらくするとまた同じ質問をしてくる。
結果、何度も同じ回答をしなければならなくなる。
回答ってのは質問者は自動で出てくると思ってるかもしれんが実際は回答者にも労力が必要なんだ。
0632デフォルトの名無しさん
2017/02/12(日) 12:05:54.59ID:SthYlIVq0633デフォルトの名無しさん
2017/02/12(日) 12:23:25.59ID:6V2BuQIU馬鹿過ぎる質問者は最初に追い払うのがいいんだよ
0634デフォルトの名無しさん
2017/02/12(日) 12:40:25.32ID:SthYlIVqここはまだマシだと感じるな
0635デフォルトの名無しさん
2017/02/12(日) 12:50:07.91ID:LExlgtgk0636デフォルトの名無しさん
2017/02/12(日) 13:08:38.95ID:FS+b1cKU0637デフォルトの名無しさん
2017/02/12(日) 13:21:05.98ID:nEtYr4+H向うも判ってくれる。
けどこういう掲示板では相談者にとっては当たり前の事でも全然違う。まぁそれも訓練せんとなかなか判り易い質問ってのは
書けないw
自分も最近はあまり質問してないけど、以前は他のスレで叩かれまくったよwww
0638デフォルトの名無しさん
2017/02/12(日) 13:49:23.28ID:CC9/6sU1だから俺は大抵嫌がらせのように考え方の指針だけ答えるようにしてるけど、大体教えたがりが答えだしちゃうよね
0639デフォルトの名無しさん
2017/02/12(日) 13:50:29.70ID:CC9/6sU1別にこのスレが廃れるのはいいよ
このスレで答えられることなんて大抵オフィス田中にのってる
0640デフォルトの名無しさん
2017/02/12(日) 14:03:28.41ID:amMPaDhLどんな質問されても迷惑したことなんてないけど
それお前だけと違うか?
質問が理解できなくて悩んであげく質問した人にキレて
結果皆に迷惑かけてんのお前の方じゃね?
0641デフォルトの名無しさん
2017/02/12(日) 14:10:12.91ID:FS+b1cKU0642デフォルトの名無しさん
2017/02/12(日) 14:10:23.19ID:uMNKLmCG悪いがそれは無い。
それに俺もそういうアホな質問に回答しない方だから俺自身が被害に合うことも少ない。
でも掲示板のやり取りなんか見てるとトラブルになってるのはそういうのが多い。
0643デフォルトの名無しさん
2017/02/12(日) 14:13:15.48ID:amMPaDhLそういうのってキレた教えたがりだよ
0644デフォルトの名無しさん
2017/02/12(日) 14:27:08.47ID:TQOoi023>環境も問題も分かっている隣の同僚に聞く分には前提からなにからすっ飛ばして聞いてもある程度は
>向うも判ってくれる。
あなたは人間が出来てるね。俺は隣の同僚に聞かれるとムカッとくる。インデントもしてねえ汚ったねえ呪文みてえなコードを
見せられて「どこが悪いんだろ?」と言われても全部だろ全部、書き直してやるから三万払えコノヤローと叫びたくなる。
実際には、笑顔で書き直してやってるけどw
0645デフォルトの名無しさん
2017/02/12(日) 15:44:19.46ID:uMNKLmCGそれは無いわ。
だって直接やり取りできるなら何でも聞けるだろ。
問題はやり取りしまくって、結局元々の設計がダメで元に戻る時とかだから詳細をいくらでも聴ける時は頭には来ない。
ダメコードなのは最初から織り込み済みだし。
相手のレベルも分かってるでしょ。
0646デフォルトの名無しさん
2017/02/12(日) 15:48:38.40ID:LExlgtgkそれなら隣に座ってる同僚に聞いたほう が早いだろうに
0647デフォルトの名無しさん
2017/02/12(日) 16:12:35.44ID:amMPaDhLいや別にお前が困る必要はないよw
分からなければ黙ってスルーしておけばいいだけ
0648デフォルトの名無しさん
2017/02/12(日) 17:17:33.80ID:FS+b1cKU会社で隣のやつとプログラムの話って想像しにくいんだけど、どういう状況だ?
同じプログラムを共有でもしてるのか?
0649デフォルトの名無しさん
2017/02/12(日) 17:23:48.50ID:uMNKLmCGで、それじゃあ回答のしようも無いわなって終わるような場合にこちらのスキル不足認定されると頭に来るかもね。
状況だけで回答できる場合もあればそうじゃない場合もあるわけで、回答しようもない場合もあるわけだからさ、その場合は回答者の問題じゃないのに理解出来ない質問者ってのがまれにいる。
0650デフォルトの名無しさん
2017/02/12(日) 17:27:40.76ID:uMNKLmCGそれぞれ全然別作業してても、結局分かる奴に質問が集中するもんでしょ。
分からない時は彼に聞けばみたいなの。
人づてに全然知らない人から教えて欲しいってこともあるし。
0651デフォルトの名無しさん
2017/02/12(日) 17:28:45.00ID:VkacFT0cステップ踏まずに答えだけ聞いて手抜きしようとするバカが多い
なぜそうなるか、を理解しないからなんも成長しなくて同じことを繰り返す
そういうバカだから質問も的を射ないで抽象的
そりゃ、君の脳みそじゃわからんよねとは思うよ
0652デフォルトの名無しさん
2017/02/12(日) 17:40:24.11ID:UUbs1MWiバカが多すぎて辟易する
0653デフォルトの名無しさん
2017/02/12(日) 18:04:26.68ID:v4isfS8N国家試験あるじゃない
免許じゃないけど企業側がその結果を利用すればいい
0654デフォルトの名無しさん
2017/02/12(日) 18:27:17.36ID:yxF5W3i1> 実際には、笑顔で書き直してやってるけどw
俺も人間できてるだろ、どや
って言いたいのかよ w
0655デフォルトの名無しさん
2017/02/12(日) 18:32:30.34ID:yxF5W3i1一時社内でマジで検討したことがある
結局適当な資格を決められずに頓挫したけど
0656デフォルトの名無しさん
2017/02/12(日) 18:40:30.05ID:TQOoi023>俺も人間できてるだろ、どや
>って言いたいのかよ w
そうw
0657デフォルトの名無しさん
2017/02/12(日) 18:48:13.67ID:GCBuHwjB不合格者はどうする案だったの?
0658デフォルトの名無しさん
2017/02/12(日) 18:58:47.93ID:uMNKLmCGどうも、勝負出来るスキルが無いから資格でなんとかしようって奴が多い。
面接での決定権握ってる奴ができる技術者ならすぐにレベルなんて分かる筈なんだけどなあ。
実際はそうじゃ無いことが多いよなあ。
0659デフォルトの名無しさん
2017/02/12(日) 19:15:20.52ID:GCBuHwjB0660デフォルトの名無しさん
2017/02/12(日) 19:20:38.47ID:amMPaDhL0661デフォルトの名無しさん
2017/02/12(日) 19:34:39.49ID:uMNKLmCG俺は俺よりできる奴がたくさんいるからそんなこと言えないな。
0662デフォルトの名無しさん
2017/02/12(日) 20:22:16.08ID:yxF5W3i1テスト要員とかドキュメント管理とか
0663デフォルトの名無しさん
2017/02/12(日) 20:39:44.09ID:MzCVzIkjここで質問してるやつらの半分くらいはそんな感じじゃね
まともに勉強してるとは思えない質問が多いし
0664デフォルトの名無しさん
2017/02/12(日) 20:42:14.91ID:zIkO4GAAGetとEOFってどう違うんですか?
なんか両方「全部」ってのが共通みたいですが?
0665デフォルトの名無しさん
2017/02/12(日) 20:53:22.25ID:MzCVzIkj釣りにしてもひどない?
0666デフォルトの名無しさん
2017/02/12(日) 22:37:48.01ID:UPBLh8xx英語もそうだけど実践的に使用する技術は「知識として知っていればいい」というもんじゃないからな。
まぁSEとかPG名乗りながら論理回路って何ですかみたいなのは切っていいと思うけど。
0667デフォルトの名無しさん
2017/02/12(日) 22:48:43.09ID:SolFmjsLそうですよね。
ところで論理回路って何ですか?
0668デフォルトの名無しさん
2017/02/12(日) 22:57:44.43ID:yxF5W3i1そう思ったならなぜスルーしないんだよ...
0669デフォルトの名無しさん
2017/02/12(日) 23:38:53.25ID:l0D/TqVE俺PG歴長いけど、「引数」の読み方知らないぞ。
0670デフォルトの名無しさん
2017/02/12(日) 23:50:47.91ID:hrcImG9tそれとも因数とややこしいから、敢えて違う読み方してるのかな?
抜糸(抜歯とややこしいからバツイト)、首長(クビチョウ)みたいに。
0671デフォルトの名無しさん
2017/02/12(日) 23:54:27.68ID:SolFmjsLさしむき?
あとVisualStudioの「Studio」は?
わたしは英語圏の生活長いからいつもステューディオウだけど合ってるかな?
0672デフォルトの名無しさん
2017/02/12(日) 23:58:50.90ID:7cAel6qOしむけ
0673デフォルトの名無しさん
2017/02/12(日) 23:59:46.79ID:XHYJ/nHJ0674デフォルトの名無しさん
2017/02/13(月) 00:50:43.41ID:TuS8jPy4これ無意識だから絶対に日本人のようなあの不気味な平坦なアクセントができない。
日本人のあの平坦な発音の仕方って気持ち悪いから意識しても真似ようという気が起こりすらしないけど。
[例]
プ[ロ]パティ
[メ]ソッド
[シ]グネチャ
プロ[シ]ージャ
などで、[□]で印したところにアクセントおいてるけど日本人は不気味で全部平坦で発音してて単語の最後が微妙に伸ばしてるるよね。
0675デフォルトの名無しさん
2017/02/13(月) 00:59:14.48ID:S035yfE+これって学習能力や適応力のなさを自慢する大会ですよね
そういう自虐的な思考は完全に日本人の物だから安心していいですよ
0676デフォルトの名無しさん
2017/02/13(月) 01:20:23.88ID:TuS8jPy40677デフォルトの名無しさん
2017/02/13(月) 01:26:42.46ID:C+gt+Ln2次の質問どうぞー
0678デフォルトの名無しさん
2017/02/13(月) 01:27:44.32ID:0xlsTvjn承認します
0679デフォルトの名無しさん
2017/02/13(月) 02:35:42.13ID:d9vpZ2GCASCIIコード見れば分かると思うが、文字の1と0はそのままANDもORも出来るから。
"0"->110000
"1"->110001
一番最後の桁以外はANDもORも変わらん。
知識よりも目的に向かっての創意工夫の方が大きいんじゃない?
0680デフォルトの名無しさん
2017/02/13(月) 08:05:56.56ID:+cwVmN7p触ったら面白いかな?って思って
0681デフォルトの名無しさん
2017/02/13(月) 08:20:45.44ID:3tq7pNhG俺は仕事の場合は相手によって使い分けるようにしてるよ
相手に伝わってナンボ
0682デフォルトの名無しさん
2017/02/13(月) 09:05:12.35ID:VG69ZfS4真似すればいいじゃん?
0683デフォルトの名無しさん
2017/02/13(月) 12:47:15.39ID:Ah1ijx/Jまずその1や0を文字列として扱うのが正当なのか疑問なんだが
0684デフォルトの名無しさん
2017/02/13(月) 12:48:50.42ID:+cwVmN7pまずこの文で要件を汲み取ることが難しいわ
0685デフォルトの名無しさん
2017/02/13(月) 13:04:24.32ID:FQScQiCC今回は効きすぎだろ ww
0686デフォルトの名無しさん
2017/02/13(月) 13:07:44.96ID:FQScQiCCごめんなさい
投下場所間違えました
0687デフォルトの名無しさん
2017/02/13(月) 13:26:07.32ID:d9vpZ2GCその通りだが、既に与えられてるデータがそうなってて他社とやり取りされてたから仕方ない。
まあ、そこの会社もそれは分かってたみたいでその後普通のバイナリに移行してたな。
0688デフォルトの名無しさん
2017/02/13(月) 20:00:37.76ID:d/USi4s0"0" ⇒ &H30, "1" ⇒ &H31 だから Asc( ) でコードにしてそのまま And/Or できるって言いたいんだろ
もとのコードがどんなもんか知らんけど俺は文字のまま処理するって言うのも別におかしくないと思う
0689デフォルトの名無しさん
2017/02/13(月) 20:18:34.49ID:1gaAmlEBVal("0") Or Val("1")
みたいな状態になってるからすごく効率悪い
0690デフォルトの名無しさん
2017/02/13(月) 21:49:13.40ID:s/tywzZZ0691デフォルトの名無しさん
2017/02/13(月) 22:24:31.70ID:01I2Ha4W0692デフォルトの名無しさん
2017/02/14(火) 00:40:54.47ID:ClQJHzh+スピードで100倍以上違うよ。
0693デフォルトの名無しさん
2017/02/14(火) 01:22:00.98ID:DOjYefWL0694デフォルトの名無しさん
2017/02/14(火) 09:29:24.02ID:1O/6AsKpレジストとか外に制御テーブル持っててくれれば良いけど、エクセルは内部で抱えてるみたいだし。
日本だけの独自文化だし、ある意味買い替えの特需だからマイクロソフトも対応するとも思えない。
マイクロソフトを信じて待つのが正しい?
0695デフォルトの名無しさん
2017/02/14(火) 09:36:36.27ID:ES7A40w+この程度で可読性無くなってると思うんじゃ話にならない。
100倍程度とか簡単に言うのもどうなんだろね。
この論理演算を1回とか2回とか実施して終わるとか思ってるんだろうな。
実際のこの関数を呼び出す大元のマクロでそれまで6時間とかかかってたんだがね。
0、1のテキストファイルのサイズにもよるんだろうけど300Mbyteのファイルの時はそんなだったな。
0696デフォルトの名無しさん
2017/02/14(火) 09:47:37.20ID:he6YB8dM待つのが正しい
ただし対応しました!といってから2ヶ月くらい待つのが正しい
0697デフォルトの名無しさん
2017/02/14(火) 09:59:06.01ID:1O/6AsKpデイリーで処理してるから
速攻でバレるんよ。
もしマイクロソフトが対応してくれないと。
0698デフォルトの名無しさん
2017/02/14(火) 10:18:16.37ID:XQOX6frc和暦なんて最終的な表示部分だけでしょ?
アドホックな対応でごまかしながら待つしかないんじゃないかなあ。
0699デフォルトの名無しさん
2017/02/14(火) 10:20:17.77ID:1O/6AsKp処理が終わったところでイベント発生禁止にして上書き、んでイベント復活しかない?
0700デフォルトの名無しさん
2017/02/14(火) 21:19:12.87ID:zSFmfMPu昭和のときは三ヶ月掛かったけど
消費税もそうだけど、日付と名称(消費税なら率)が判明したらそこだけだもの、今回は瞬殺だろ
0701デフォルトの名無しさん
2017/02/14(火) 23:14:00.51ID:erEJytj9平成31年1月1日に生前退位が行われ新元号になるってのが決まってるんだから
その時まで不測の事態が起こらない限り事前の準備時間はある…?のかな
0702デフォルトの名無しさん
2017/02/14(火) 23:24:09.61ID:ev1pSY1G俺ならオブジェクト指原ってボケる。
>>701
既に次の年号が組み込まれていたら笑う。
0703デフォルトの名無しさん
2017/02/14(火) 23:27:43.38ID:UB3JXf9t0704デフォルトの名無しさん
2017/02/14(火) 23:52:21.37ID:fgjpd/Zj0705デフォルトの名無しさん
2017/02/15(水) 00:12:27.99ID:urFAvqLFそうでない場合は漏れが許されないんだぞ
0706デフォルトの名無しさん
2017/02/15(水) 03:50:35.87ID:vC8DQIA41月1日では他の宮中行事とカブってワチャワチャするからズラすとか言ってなかった?
まぁ事前にわかる事に変わりはないか。
0707デフォルトの名無しさん
2017/02/15(水) 08:20:59.18ID:uIQboeV9まじか…OSが持ってると思ってたよ…
会社のOfficeはそろそろ新しいのに買い換えないとな
0708デフォルトの名無しさん
2017/02/15(水) 12:27:48.68ID:wBM76KMmVBAとかで作ってる社内資料は殆ど和暦表示だから、今から考えると恐ろしいわ…
0709デフォルトの名無しさん
2017/02/15(水) 13:37:00.48ID:HgaCZlv60710デフォルトの名無しさん
2017/02/15(水) 13:47:11.11ID:6F4521pz0711デフォルトの名無しさん
2017/02/15(水) 14:58:51.71ID:5igOyxsI日付、時刻は上から下へと、時系列に並んでいます
日付・時刻・アイテム名の同時重複ありです
やりたいこと=「表示したい”行数を入力”して、その行数をシートの左上にして表示する」
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でエラー表示させたいのですが
0712デフォルトの名無しさん
2017/02/15(水) 15:37:06.29ID:xVeThrOdOn Error使うか
Dim NumRow As Variant にして後で数値か? 許容範囲か? チェックしる
0713デフォルトの名無しさん
2017/02/15(水) 15:41:53.42ID:6lReDbAzそうなんですか。
ご苦労が多そうですが
養生なさってください。
0714デフォルトの名無しさん
2017/02/15(水) 17:50:36.24ID:uggMbaXG0715デフォルトの名無しさん
2017/02/15(水) 18:10:31.64ID:khJPh7n10716デフォルトの名無しさん
2017/02/15(水) 18:19:40.04ID:LgUU6dFz面倒なので迷ったらVariantですごめんなさい
0717デフォルトの名無しさん
2017/02/15(水) 18:58:10.50ID:MestFhjvこの場ではどんな使い方だとしても目的を果たせればいい
メンテナンス性を考えるならできあがってから考えても遅くないし
0718デフォルトの名無しさん
2017/02/15(水) 19:35:12.52ID:8P5JIAcqVariant 以外はあまり使いませんな。カウンタに Long を使うくらいか。
0719デフォルトの名無しさん
2017/02/15(水) 19:49:51.07ID:yaVm0IDevariantを使えない奴がクソ呼ばわりしてるだけだ
0720デフォルトの名無しさん
2017/02/15(水) 20:00:12.56ID:F/aHSwB0基本使うべきじゃない。
Rangeを配列で受ける時とか、特別な理由があるなら分かるけど。
0721デフォルトの名無しさん
2017/02/15(水) 20:15:18.98ID:8QtzDjS+揮発性関数を一切使ってないのに(マクロも外部データの参照も使っていません)
ブックを開いてすぐ閉じても変更を保存するか確認するダイアログボックスが出てきて困っています。
なんでこんな事になったのか心当たりが有りません。
揮発性関数以外にブックの保存を促す要素って何か有るのでしょうか?
0722デフォルトの名無しさん
2017/02/15(水) 20:34:50.87ID:khJPh7n1型が確定してないのとかチンポジずれてるみたいで気持ち悪い
0723デフォルトの名無しさん
2017/02/15(水) 20:46:48.47ID:wfPvVi6qマイクロソフトは早く拡張しろ
0724デフォルトの名無しさん
2017/02/15(水) 20:52:37.92ID:UwBeD5Zq0725デフォルトの名無しさん
2017/02/15(水) 20:52:53.63ID:je/ZAYb+ほとんどの場合引数の型が確定しないので結局Variantだらけになる
0726デフォルトの名無しさん
2017/02/15(水) 21:05:02.59ID:khJPh7n1でもあとからキャストするでしょ
0727デフォルトの名無しさん
2017/02/15(水) 21:09:13.63ID:F/aHSwB0はあ?
確定しないことなんて殆ど無いわ。
設計が悪いんだろう。
0728デフォルトの名無しさん
2017/02/15(水) 21:20:08.65ID:yaVm0IDeお前らどんだけプログラミングが下手なんだよ
0729デフォルトの名無しさん
2017/02/15(水) 21:21:34.66ID:OJCj5dj4馬鹿
0730デフォルトの名無しさん
2017/02/15(水) 21:22:18.43ID:khJPh7n1他になんか必要な場面あるかね
0731デフォルトの名無しさん
2017/02/15(水) 21:23:23.84ID:MestFhjv0732デフォルトの名無しさん
2017/02/15(水) 21:23:56.89ID:khJPh7n1variantで書けるから偉いのか?
全部variantで書いて処理速度が問題ない程度のプログラムしか書かないならそれでも良いんじゃない
0733デフォルトの名無しさん
2017/02/15(水) 21:25:00.63ID:yaVm0IDeは?なんでそうなるんだよ
variantで書けないから下手なんだよ
0734デフォルトの名無しさん
2017/02/15(水) 21:27:54.70ID:UwBeD5Zqそんなにvariantが好きならjsをオススメする
0735デフォルトの名無しさん
2017/02/15(水) 21:28:00.36ID:xVeThrOdDim b As Variant
For Each b In a
Next
とか
0736デフォルトの名無しさん
2017/02/15(水) 21:31:10.86ID:F/aHSwB0VB系のプログラマーが他から糞呼ばわりされるのが良く分かる。
俺に言わせればVBが糞なんじゃなく、そのプログラマーが糞なんだが、確かにVBAには糞コード書く奴が多いよな。
0737デフォルトの名無しさん
2017/02/15(水) 21:33:07.33ID:khJPh7n1いやね、variantで書けと言われれば書けるよ
書く必要がないし気持ち悪いし大抵遅くなるからやらないだけで
>>735
その書き方あんま見たことないけど普通のforに比べて速かったりするの?
0738デフォルトの名無しさん
2017/02/15(水) 21:35:18.88ID:vaCBxgQgコードはって
0739デフォルトの名無しさん
2017/02/15(水) 21:38:36.03ID:A9woeCde>マクロも外部データの参照も使っていません
って言ってるのに
>コードはって
とか言ってもな
0740デフォルトの名無しさん
2017/02/15(水) 21:38:42.30ID:yaVm0IDevariantの遅さなんてアルゴリズムの遅さに比べれば誤差にも届かんのだよ
つまり遅いのはvariantのせいではない
0741デフォルトの名無しさん
2017/02/15(水) 21:46:30.70ID:F/aHSwB0そういう問題じゃ無い。
そして、実際に遅い時点で糞コード。
メリットが無い安易な逃げだな。
技術力の無さを埋めるための。
まったく、動けば良いと思ってる奴が多すぎる。
0742デフォルトの名無しさん
2017/02/15(水) 21:49:04.70ID:khJPh7n1この人のプログラムは変数名もきっと適当であとから見たら何が何だかわからないだろうね
0743デフォルトの名無しさん
2017/02/15(水) 21:49:26.25ID:yaVm0IDeつまりお前がクソコード書いてるって事じゃないかw
何言ってんのお前w
0744デフォルトの名無しさん
2017/02/15(水) 21:50:42.27ID:UwBeD5Zq日本語でおk
0745デフォルトの名無しさん
2017/02/15(水) 22:05:34.61ID:je/ZAYb+確定しないことがほとんどさ
0746デフォルトの名無しさん
2017/02/15(水) 22:13:59.52ID:YhLDJr+cコードに表れないことばっかになると読む方が辛い
0747デフォルトの名無しさん
2017/02/15(水) 22:14:54.77ID:yaVm0IDevariantを使って分かりにくくなるのは型をコントロール出来ていないコードだから
重要なのは変数の型ではなく値の型
値の型が一貫してコントロール下にあるコードは全てvariantでも読みやすくバグも出にくい
本当に気を使うべきは値の型
0748デフォルトの名無しさん
2017/02/15(水) 22:15:25.45ID:je/ZAYb+As Variant 282個
As その他 102個
だった。
「ほとんど」というのは言い過ぎだったかも。
0749デフォルトの名無しさん
2017/02/15(水) 22:19:05.17ID:je/ZAYb+As Variant 238個
As その他 17個
だった。こっちは「ほとんど」と言える。
0750デフォルトの名無しさん
2017/02/15(水) 22:28:33.65ID:wfPvVi6qタイプセーフにすれば動作する前に型をコントロールできていることがはっきりする
0751デフォルトの名無しさん
2017/02/15(水) 22:31:45.05ID:m87qnWVq別途DLL、EXE、その他一切のファイルの使用は出来ません
Webサーバを立ててそっちにPOSTして解凍したファイルを送り返してもらう、
という案もだめでした(ネットワークに繋がっていなくても動ける必要アリ)
ZIPならApplication.Shellを使うという定番技があるんですが、gzファイルでも
同じように解凍出来ませんでしょうか?
.NETの System.IO.compressionが使えたりしないか試してみましたらCOMでは
ないようで駄目でした
0752デフォルトの名無しさん
2017/02/15(水) 22:37:18.33ID:khJPh7n1いや、最後にすんなやw
型をvariantにする必要性が全く見えてこない
少なくともVBAはコード側で型付けする言語だと思ってるんですが
.NETだったら全部Objectで処理するのか…?
0753デフォルトの名無しさん
2017/02/15(水) 22:38:45.19ID:F/aHSwB0だからそういう問題じゃない。
絶対にLong以外有り得ないのにVariantにするのはクソだ。
そして決まらないのは設計がクソだからだ。
というより設計して無いんじゃないか?
取りあえず動くようにしてるだけで。
「Variantでも」と言ってる時点で糞。
同等ではメリットになっていない。
そして実際にはデメリットに気付いて無いだけ。
0754デフォルトの名無しさん
2017/02/15(水) 22:46:22.73ID:je/ZAYb+値の型って何?
Variant変数に格納された値自体の型ってことなら、コントロールは難しいと思うよ。
0755デフォルトの名無しさん
2017/02/15(水) 22:46:54.44ID:J6VHa6KYウチの会社のエクセルは、神エクセルですから、
セルに「1/3個」とか平気で書いちゃうんですね。
だから、バリアントじゃないとエローになっちゃうんですね。
0756デフォルトの名無しさん
2017/02/15(水) 22:50:51.92ID:khJPh7n1バカかな?
0757デフォルトの名無しさん
2017/02/15(水) 22:51:02.74ID:BBx5ZcB8とりあえず動けばいいマクロを書く場面だって社内SEならよくあるだろうし、
逆に型指定しておく事でバグが発生しにくくなるとかマクロが使いやすくなるっていうなら積極的に型指定すべきだし。
いついかなる場合においてもVariant型は極力避けるべきであるって論調なら、ただ頭が固すぎる。
0758デフォルトの名無しさん
2017/02/15(水) 22:52:39.74ID:tPmatHBd0"個"
にしてあるのに「3個」って入力されて集計から漏れるのは防ぎようがない
VBA使っていいんなら勝手に「個」を消して、全角の数字も半角にして、オーをゼロに置換してやるんだけど
0759デフォルトの名無しさん
2017/02/15(水) 22:53:31.89ID:yaVm0IDeじゃあもう一回w
お前らプログラミングがヘタクソだから
variantでキレイなコードを書けるように練習しなよ
俺が言ってるのそういう事w
お前らの興味が向いている様な初心者のおまじないみたいな話は
ハナから問題にしてないw
0760デフォルトの名無しさん
2017/02/15(水) 23:06:54.66ID:khJPh7n1極論言えばだな
お前はループ用の変数までvariantで書くのか?
という話なんだよ
0761デフォルトの名無しさん
2017/02/15(水) 23:09:58.33ID:F/aHSwB0完全にアホ過ぎる。
Variantで書いても既にキレイなの。
分かる?
でもそれはきちんと型指定してもキレイなの。
0762デフォルトの名無しさん
2017/02/15(水) 23:13:41.64ID:BBx5ZcB8ループ用の変数はループに入る時点でロックされて型が決定するから、
Variant型でやろうがLong型でやろうが大して差は開かなかったはず。
ただ変数型の違いよる処理時間はVariant = Long > Integer > Byteの順になってたはずだから、
ループ回数の上限が分かっているならIntegerやByteを使うのは有効。
0763デフォルトの名無しさん
2017/02/15(水) 23:15:19.21ID:F/aHSwB0キレイに書くのは当たり前。
>>757
取りあえずってのはそいつのコーディングスタイルというか、癖みたいなもんもあるからあり得るだろうな。
俺だってコメント全く無しで書くこともある。
その時だけのマクロとか。
でもそれをOKとは言わないだろ。
0764デフォルトの名無しさん
2017/02/15(水) 23:15:24.29ID:khJPh7n1まあその程度のプログラムしか書いてないんだよ
worksheetとかrangeとかを全部objectで指定してるのと一緒だぞ
0765デフォルトの名無しさん
2017/02/15(水) 23:16:47.40ID:aYEzhSy+ループ用の変数なんてどうでもいいから宣言もしてないな
結果variantになってるなw
0766デフォルトの名無しさん
2017/02/15(水) 23:17:28.43ID:je/ZAYb+それはエラーになるのが正解
というか自ら進んでエラーを出して止まるべき
俺のプログラムがほとんど As Variant だと言ったけど、それはVariantであるべきプログラムだから。
0767デフォルトの名無しさん
2017/02/15(水) 23:18:17.50ID:pcB8Xi3u0768デフォルトの名無しさん
2017/02/15(水) 23:19:42.16ID:khJPh7n1でもループ変数をvariantで書くやつなんかほとんどいない
なぜなら意味がないから
longで書くことには意味があるから
variantにすることに意味があるならする
処理速度的に意味がなくても明示的にこの変数はこの型ですよ、ってしてあげることで可読性は上がる
0769デフォルトの名無しさん
2017/02/15(水) 23:20:13.95ID:je/ZAYb+普通に考えると
Long <= Integer = Byte < Variant の順だと思う
0770デフォルトの名無しさん
2017/02/15(水) 23:24:33.53ID:F/aHSwB0いや、ここVBAのスレだろ。
で、"3個"をそのまま受け取るような処理を何も考えずに書くから糞なんだよ。
まず第1にそのまま受け取る処理が良いのかどうかを考えるべきだろ。
そして、そのまま受け取るのが良いと決まってから文字列で受け取るかVariantで受け取るかどちらが良いのかとかを考える。
その結果、Variantが良いとなるならVariantを使っても良いんだよ。
で、そういう考え方で設計してたら必然的にVariantは殆ど無くなるんだ。
0771デフォルトの名無しさん
2017/02/15(水) 23:27:25.23ID:khJPh7n1そもそもこの場合だってその可能性があるならまずstringで受け取ってから処理すりゃ良いだけのことだしな
variantである意味がほとんどない
0772デフォルトの名無しさん
2017/02/15(水) 23:28:28.84ID:F/aHSwB0そう、意味を考える。
一緒に速度も考える。
で、意味的に型決まってても速度のメリットを取ってVariantというのが配列をぶち込む定番の処理だろ。
0773デフォルトの名無しさん
2017/02/15(水) 23:30:58.50ID:je/ZAYb+よく考えて必然的に Variant が殆どになる場合もあるけどね
0774デフォルトの名無しさん
2017/02/15(水) 23:41:14.47ID:khJPh7n1セルをそのまま配列にぶちこむときはそうなるな
>>773
どういう場合だ?
あんまり経験ないんだがな
目的の処理をする場合処理したい対象の型は大抵決まってるし、返したい値も決まってるだろ
0775デフォルトの名無しさん
2017/02/15(水) 23:45:21.19ID:je/ZAYb+複数のユーザーが決める違う型の値を受け取る共通ライブラリを作る時。
0776デフォルトの名無しさん
2017/02/15(水) 23:50:27.16ID:khJPh7n1その手の処理をしたことないんだけど、受け取ったあとに型を確定はできないのか?
どういう結果を返すんだそりゃ
0777デフォルトの名無しさん
2017/02/15(水) 23:58:29.83ID:je/ZAYb+VarType で型を判別して分岐〜、なんてやってたら引数が複数の時は
組み合わせが爆発してしまうのでそれは(積極的には)やらない。
関数の単一目的性を守ってれば「処理できない型の値を入れたらエラーになる」という方針で破綻しないよ。
0778デフォルトの名無しさん
2017/02/16(木) 00:01:00.36ID:W0y5+uWSだからどうしたよ?
あーだコーダいうなら頭使えよ?
スレ名を大きな声で復唱してみなさい。
0779デフォルトの名無しさん
2017/02/16(木) 00:17:58.70ID:SiA9A9XVそういう馬鹿に限ってvariantを多用する
こういうことだよな
0780デフォルトの名無しさん
2017/02/16(木) 00:32:38.95ID:vlXKqRPMいやさ、variantで受け取ってvariantで返すのか?その関数
そもそもそんなたくさんの型不定の引数を受けとるような関数は欠陥じゃないのか?
どんな環境なのか想像できんわ
あんまりそれが一般的と思わぬよう
0781デフォルトの名無しさん
2017/02/16(木) 00:45:35.60ID:XCVAoIB6う〜ん、そこは3速じゃねえんだよなぁとかブツブツ言いながら、
自分で2速に入れてる感じ。
キモイのでやめましょう。
0782デフォルトの名無しさん
2017/02/16(木) 00:47:14.79ID:NIevlqDH0783デフォルトの名無しさん
2017/02/16(木) 00:55:11.61ID:l4RhA8QW0784デフォルトの名無しさん
2017/02/16(木) 00:57:14.89ID:XCVAoIB6あんたが使ってるのは、型指定しないと動かない変なExcel。(パチモン?)
俺が使ってるのは、型指定しなくても動くExcel。
これでいいだろ。
0785デフォルトの名無しさん
2017/02/16(木) 01:26:19.50ID:XCVAoIB6Longの方が0.003秒速いとか言ってると、多分モテない。
0786デフォルトの名無しさん
2017/02/16(木) 02:45:15.21ID:SiA9A9XV馬鹿の見本
0787デフォルトの名無しさん
2017/02/16(木) 02:58:29.09ID:7EemdXzw0788デフォルトの名無しさん
2017/02/16(木) 02:59:41.43ID:nVgOLTepきちんと設計すれば大抵は型が決まる。
積極的にVariantを使う特別な理由があって、分かっててVariantを使うこともあるが、普段からVariantを使うことは無い。
0789デフォルトの名無しさん
2017/02/16(木) 04:36:21.82ID:GoZ0ZsyN具体的には上流工程なのか下流工程なのかで変わってくる気がする。
下流工程では引数の型は決まっているし、決まった型で返却すれば責任を全うできるけど、
上流工程ではプリミティブ型にしていても実行時に避けられない不測の事態が山ほどあるし、
下手に型決めた方がエラー吐きまくるっていう面倒な事もあるから、On ErrorとVariant型でいいやってなる場合も多い。
そして「ここは絶対に数値型で入力してください」と散々注意しても無意味に終わるから、
結局は>>777の言うような「想定外の場合にはエラーで返す」という設計が最もユーザビリティに優れる事になる。
誰かがコード見た時も、ある特定の条件でエラーとして弾いておく方が何を想定して書いたか分かりやすいしね。
0790デフォルトの名無しさん
2017/02/16(木) 05:18:31.52ID:INRkCvNUユーザーフォーム用意しといてスピンボタンや
リストボックスからの選択しか出来ない様にするとか、
variantに頼らないやりようはあると思う。
俺は自分用のマクロしか作らないんでそんな厳密なことはやってないけど。
0791デフォルトの名無しさん
2017/02/16(木) 05:26:27.50ID:GoZ0ZsyNあるにはあるけど大人しく従ってくれると思ってはならない。
シートの書式だけを新しいブックにコピーして渡してくるくらいならまだマシで、
中途半端に機能を理解してると入力規則を消して入力した上にオリジナルに上書きしたりする馬鹿がいるからな。
俺たちの安全地帯はVBEの中だけだ。
0792デフォルトの名無しさん
2017/02/16(木) 05:57:40.21ID:INRkCvNUパスワードかけて保護しても解除されるだろうとか、キリがないよ。
0793デフォルトの名無しさん
2017/02/16(木) 07:09:32.22ID:5l57RGAFお前ら布教大変だな
0794デフォルトの名無しさん
2017/02/16(木) 07:15:37.69ID:+lEx52V9入力書式とマクロじゃレベルが全然違うだろ
極論で論破したがる人なのか?
実際やってりゃ >>791 程度は普通にある
0795デフォルトの名無しさん
2017/02/16(木) 07:16:57.78ID:+lEx52V9アホとじゃれあってるだけだろ
2ちゃんではよく見る光景
0796デフォルトの名無しさん
2017/02/16(木) 07:44:12.74ID:K21kVzL8お前2ちゃん詳しいんだな、今度教えてくれよw
0797デフォルトの名無しさん
2017/02/16(木) 07:57:26.78ID:NIevlqDH0798デフォルトの名無しさん
2017/02/16(木) 08:08:51.07ID:QDmfNxD1関数の出力部分まで型が決まらないのはどういう意図かわからん
どんな分野のエクセルだとそうなるんだ
単純にそこが疑問
ちゃんと説明してもらえればスッキリするんだが
0799デフォルトの名無しさん
2017/02/16(木) 08:24:10.85ID:fAEKNUKM0800デフォルトの名無しさん
2017/02/16(木) 08:24:11.96ID:+lEx52V9設定必要でいいなら自分自身をエクスポートしてチェックサム計算するとか
0801デフォルトの名無しさん
2017/02/16(木) 08:27:39.22ID:Fvt7S/mt0802デフォルトの名無しさん
2017/02/16(木) 08:27:41.57ID:7EemdXzwならば配列を型とすればいい
0803デフォルトの名無しさん
2017/02/16(木) 08:29:01.86ID:INRkCvNUレベルの違いって、
そんな大層なもんでもないでしょ
大体、根本的には
「入力規則やマクロのコードを書き換え出来るかどうか」っていうより、
「それやっちゃったら正常に動かなくなる可能性が有る」ってことに
思い至れないようなバカ相手なら、何を考慮した所で無駄だって話じゃないかな。
0804デフォルトの名無しさん
2017/02/16(木) 09:25:36.88ID:QDmfNxD1違うのかな
0805デフォルトの名無しさん
2017/02/16(木) 10:21:07.08ID:fAEKNUKM生配列を持ったクラス Array_T を作って引数は As Array_T で宣言し、関数内では中身の配列を処理するってことか。
Array_T 自身のメソッドにするなら引数は要らないな。
それはありかも。
使う側は生配列を直接渡せず Array_T にラップしなけりゃならないけど。
0806デフォルトの名無しさん
2017/02/16(木) 10:33:49.94ID:nVgOLTepそんなことは分かりきってる。
だからと言ってVariantに逃げるのがおかしい。
入力されたものを最後までそのまま使おうとする神経が分からない。
その関数の引数が意味的にLongで受けるべきなら関数を呼び出すまでにLongにすべき。
ユーザーの入力が"3.25個"ならそこから3を取得してから、意味的にDoubleで受けるべきなら3.25を取得してから関数を呼び出すべきだ。
例えば平方根を求める関数なら整数以外の平方根も十分あり得る→Double、今作ろうとしている処理では絶対に整数以外になることは有り得ない→Longというように設計の段階で決めて行くべきだろ。
0807デフォルトの名無しさん
2017/02/16(木) 10:41:23.53ID:squjHSRZ自分で解答するコードを書けば可能。
でも、事実上無理でしょうね(スキル的に)。
0808デフォルトの名無しさん
2017/02/16(木) 10:55:09.68ID:squjHSRZ> 関数の出力部分まで型が決まらないのはどういう意図かわからん
ん?よくあることでしょ?
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
0809デフォルトの名無しさん
2017/02/16(木) 11:22:29.10ID:+lEx52V9いやいや、入力規則を変更できる奴はそこそこいるけど、マクロまでいじる奴はそんなにいないでしょ
そもそもマクロいじるような奴なら対処できてるんだろうし
0810デフォルトの名無しさん
2017/02/16(木) 11:33:37.99ID:+lEx52V9なんでそんなややこしいこと考えるかな
単に関数の戻り値の型を配列にするだけでしょ
VBA 配列を返す関数
でググれよ
0811デフォルトの名無しさん
2017/02/16(木) 11:41:36.19ID:fAEKNUKMだって>>802が「配列を型とせよ」って言うからさ。
Variantは配列専用ではないし、明示的な配列型を作れって意味に捉えた。
0812デフォルトの名無しさん
2017/02/16(木) 12:18:13.14ID:7EemdXzw俺のせいにされても困る
言いたいことは810の通りだよ
0813デフォルトの名無しさん
2017/02/16(木) 12:25:37.98ID:INRkCvNU議論の前提条件が食い違ってるんだけどさ、
肝心なのはいじれるいじれないの問題じゃなくていじって良いか悪いかっていう所であって
俺の想定している相手なら「結果がどうなるかわからないものはいじらない」のよ。
それがマクロであれ入力規則であれ。
もちろん、分かっててやるなら入力規則だろうがマクロだろうが好きにすればいいけど、
結果も分からずにいじっちゃうのはただのバカでしょ。
数値を要求するセルに誤って文字列を入れちゃうような人は不注意な人だけど、
故意ではないだろうから
そういう人の為に入力規則で間違った型の値を入れられないようにしておく
っていう所までが俺の言っている想定の範囲。
でもその入力規則を書き換えちゃうっていうのは不注意じゃなくて故意だから
そのレベルの相手が結果を考慮せずにやってるとしたらこっちがどんな対策したっていみないよね、っていってるの。
そこに相手のスキルレベルの差なんて大した問題ではないと思うんだ。
実際、俺の職場じゃvbeでの編集ぐらいは誰でも出来るけど、
他人の書いたコードなんて不用意にいじらないし、それは入力規則でも同様。
0814デフォルトの名無しさん
2017/02/16(木) 12:26:10.91ID:DbYeWqRP自分用に使うなら最終的に動けば良い、ただし他人の作ったマクロの引継だけは勘弁
0815デフォルトの名無しさん
2017/02/16(木) 12:26:14.76ID:zFIbZFKZ2ちゃんの恥は書き捨てw
0816デフォルトの名無しさん
2017/02/16(木) 12:36:03.92ID:QDmfNxD1普通にDoubleで返しちゃあかん理由あるの
0817デフォルトの名無しさん
2017/02/16(木) 12:40:07.65ID:b6l+qNT8それを確定するんが設計ちゃうんか?(´・ω・`)
0818デフォルトの名無しさん
2017/02/16(木) 12:40:09.54ID:W0y5+uWSこの例はまさか整数と実数とかいうわけ?
説明して
0819デフォルトの名無しさん
2017/02/16(木) 12:40:30.66ID:fAEKNUKMああ、「配列を型とせよ」ってのは単に「配列型とせよ」って意味か!悪い悪いw
0820デフォルトの名無しさん
2017/02/16(木) 12:43:18.64ID:+lEx52V9だから戻り値の型を配列にすればいいだろ
Function A() As Integer()
...
End Function
ってやるだけだぞ
0821デフォルトの名無しさん
2017/02/16(木) 12:46:11.45ID:QDmfNxD10822デフォルトの名無しさん
2017/02/16(木) 12:46:17.95ID:fAEKNUKM正しく設計するならGenericとかが必要になる。
3種類の型に対応する関数を3通り同じ名前で作れれば解決するけど、VBAではVariantになっちゃう。
0823デフォルトの名無しさん
2017/02/16(木) 12:47:22.08ID:fAEKNUKM>>819
0824デフォルトの名無しさん
2017/02/16(木) 12:49:23.78ID:+lEx52V9実際にやってみればわかる
>>791 みたいなのはわりと普通にいるけど VBE でコード改編する奴なんて見たことない
0825デフォルトの名無しさん
2017/02/16(木) 12:50:48.75ID:7EemdXzw単純なことを複雑に考えても良いこと無いよ
0826デフォルトの名無しさん
2017/02/16(木) 13:00:41.88ID:fAEKNUKMじゃあ引数 x が
・スカラー
・1次元配列
・2次元配列
で処理を分岐する関数をどう書く?
ByRef x As Variant とするしかないでしょ。
0827デフォルトの名無しさん
2017/02/16(木) 13:07:57.39ID:QDmfNxD1ひとつの関数にまとめてるのに無理があるんじゃね?
そこが設計なんじゃね?
0828デフォルトの名無しさん
2017/02/16(木) 13:15:59.12ID:fAEKNUKM内部で分岐した先の処理をPrivateな下請け関数3つに分けるのは正しいと思う。
でもユーザー(関数をライブラリとして呼び出すプログラマ)向けのPublic関数としてはひとつであって欲しいよね。
0829デフォルトの名無しさん
2017/02/16(木) 13:20:17.99ID:QDmfNxD1そういう要望というか、仕様としてそういうもの作れってことならそうなるね
でも苦肉の策であることは間違いないと思うが
返り値が違う→用途が違う、だろ?
0830デフォルトの名無しさん
2017/02/16(木) 13:22:32.18ID:gZtBZE12ど素人はそもそも変数定義せんのちゃう?
# 宣言無し許容がデフォルトやし
0831デフォルトの名無しさん
2017/02/16(木) 13:22:32.42ID:INRkCvNU君の周りの事なんて一般的な前提には出来ないっていうか、
俺だったらvbeでも改変する(勿論、全部分かった上でなら、というのが前提条件だけど。)し、
わからないのなら下手にいじらない。
0832デフォルトの名無しさん
2017/02/16(木) 13:37:58.16ID:ha+qjoA8???
ユーザー定義型配列とか普通によくあるだろ。
0833デフォルトの名無しさん
2017/02/16(木) 13:41:53.03ID:squjHSRZなんの説明を求められているのかわからない。
それはともかく、ExcelのビルトインオブジェクトのプロパティがVariantだらけだから、
そもそもが、Variantを排除しようというのが無理筋。
むしろ、Variantがデフォルトで、型を明示しないと動かないようなときだけそうする
という流派もあってもいい。
0834デフォルトの名無しさん
2017/02/16(木) 13:42:48.05ID:ha+qjoA8それを含めて工ラ一処理作るだろ。
ただし、それはそのマクロの使用環境を考える。
広く一般的に使われることを想定するならきちんとエラー処理を作る。
でも俺の場合は殆どの場合、入力規則が無い前提でしかもVariantを使わないように作るね。
0835デフォルトの名無しさん
2017/02/16(木) 13:45:06.19ID:+lEx52V9> 君の周りの事なんて一般的な前提には出来ないっていうか、
そのまま返すよ
そもそも改変して何をするつもりなんだよ w
0836デフォルトの名無しさん
2017/02/16(木) 13:58:35.66ID:INRkCvNUだからこそその辺を論点にはしていない。
最初から言ってるように、
結果も把握できない改変を伴うような事をしでかす連中相手には
何をやっても無駄だと言っている。
0837デフォルトの名無しさん
2017/02/16(木) 15:02:37.01ID:fAEKNUKM???
ユーザー定義型配列を受け入れる関数なんてあらかじめ作っておくことはできないから
そんなもん対応範囲外だろ。
0838デフォルトの名無しさん
2017/02/16(木) 16:46:11.40ID:ha+qjoA8あのさあ、何言ってんの?
ユーザー定義型をググって来い。
Cとかで言われる構造体だよ。
話にならん。
0839デフォルトの名無しさん
2017/02/16(木) 16:58:09.82ID:fAEKNUKMユーザー定義型と>>826の問題にいったい何の関係があるのかと
頭大丈夫?
0840デフォルトの名無しさん
2017/02/16(木) 17:05:09.07ID:squjHSRZいいかげん、お前の「正しい設計論」は聞き飽きた
そろそろ黙ってくれる?
0841デフォルトの名無しさん
2017/02/16(木) 17:36:38.86ID:ha+qjoA8ああ、そもそもの>>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)
だったかな。
スマホからだから少し違ってるかもしれんが、こんなん、普通にできるだろ。
0842デフォルトの名無しさん
2017/02/16(木) 17:47:04.29ID:6YRpUZ/n元はといえば全部Variantでやれないやつはプログラム組むのが下手とかよくわからんこと言うやつがいたのが発端だし論点ずれてきてるね
0843デフォルトの名無しさん
2017/02/16(木) 18:31:43.04ID:SiA9A9XV馬鹿は何でもかんでもVaruant
0844デフォルトの名無しさん
2017/02/16(木) 18:41:29.77ID:7EemdXzw0845デフォルトの名無しさん
2017/02/16(木) 19:06:06.30ID:eA7r2zui元の検索キーワード: Varuant
グーグル先生すげえw
0846デフォルトの名無しさん
2017/02/16(木) 19:15:18.59ID:C8BNWAf7ポリモーフェィックな動作が要求されているならインターフェースを使う
Variantを強要するAPIを使うときにVariantから型付きに変換(あるいはラップ)するときにのみVariantを使う
常識的な職業プログラマならこれが正解
品質を要求されないアマチュアならどうだっていいよ
ただし本職とは極力関わらないでくれ
0847デフォルトの名無しさん
2017/02/16(木) 19:16:41.76ID:eA7r2zui>ループ用の変数はループに入る時点でロックされて型が決定
どこ情報で、ロックってどういう事をいってるんだ
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
0848デフォルトの名無しさん
2017/02/16(木) 19:17:03.10ID:+lEx52V9なるほど >>790 の提案はお馬鹿だと言いたいのか w
0849デフォルトの名無しさん
2017/02/16(木) 19:19:22.42ID:+lEx52V9俺が言うのもなんだが相手するなよ...
0850デフォルトの名無しさん
2017/02/16(木) 19:22:37.22ID:K21kVzL8むしろお前以外に誰が言うんだよw
0851デフォルトの名無しさん
2017/02/16(木) 19:31:36.39ID:eA7r2zui職業プログラマ名乗るなら言語の特性も考慮してから発言してくれ
0852デフォルトの名無しさん
2017/02/16(木) 19:32:28.92ID:INRkCvNU何を言ってるのか論旨が不明なんだけど、既に>>813で書いた通りだよ
入力規則にせよユーザーフォームにせよ、不注意によるエラーを抑止するのが目的であって
それを意図的に改変されるような事にまで対処する気はないし必要も感じない。
だって、改変までするってことは過失じゃなくて故意だから。
まさか悪気もなく自分の行動の結果にも思い至ることがなく
ヤラカスんだったらもう救いようがないじゃん。
0853デフォルトの名無しさん
2017/02/16(木) 19:39:30.06ID:C8BNWAf7顧慮した上での結論だろ
VBAは割と簡単に型安全性を維持できる言語なのだからあえて型安全を破る理由はない
静的型付けがそもそも存在しないVBスクリプトとかなら仕方がないがそうじゃない
0854デフォルトの名無しさん
2017/02/16(木) 19:41:25.77ID:fAEKNUKMそうね。
典型的で単純な例は配列からのサーチかな
ある人は Long( )から数値を探す。べつの人は String( )から文字列を探す。次元も様々
Function searchFromAr(ByRef arr() As Variant, ByRef target As Variant) As Variant
って関数になると思うんだが。
返り値はarrが1次元なら最初に見つかった番号だから Long 値でいいけど、2次元の場合は(i, j)って形の配列返しになる。
どうしたって Variant だね。
プログラムの何割かはこういう汎用アルゴリズムが必要になるでしょ?
0855デフォルトの名無しさん
2017/02/16(木) 19:42:01.60ID:+lEx52V9お前がどう言おうと入力規則を解除する奴はいるし
コードまで改編する奴は見たことない
それなりの規模の会社で実務をやってりゃ普通に経験する
0856デフォルトの名無しさん
2017/02/16(木) 19:45:20.46ID:+lEx52V9> ある人は Long( )から数値を探す。べつの人は String( )から文字列を探す。
別々の関数にすればいいだけ
あと配列の次元って取得できるんだっけ?
0857デフォルトの名無しさん
2017/02/16(木) 19:45:54.20ID:eA7r2zui>普通に型付きで問題ないなら型付きを使う
これには同意するけど
それ以外を本気で言ってるならVBA使うのやめた方がいいよ
Dim x As Integer
x = x + "2"
Debug.Print x
VBAの型安全なんてこんなもんだよ
0858デフォルトの名無しさん
2017/02/16(木) 19:50:00.85ID:MMs4mAvCだね。コードなんかさっぱりわからんってのが大多数だから。
たまに気まぐれでメンドくせえ事を手入力で延々やってる同僚に
「これに入力してこのボタンを押すとすぐ終わるぞ、試してみろ」と作ってやる事があるが
まず間違いなく礼より「どこで拾ったの?」という反応が返ってくるw
実務で即使えるようなコードがネットで拾えるわけねえだろタコと思いながらも「あぁ、2ちゃんねるで」と答えてる。
0859デフォルトの名無しさん
2017/02/16(木) 19:50:09.27ID:C8BNWAf7その程度の認識かよ
クラス使ったことないのか?
0860デフォルトの名無しさん
2017/02/16(木) 19:51:51.28ID:fAEKNUKMそれは絶対に我慢ならない。(ユーザーが)
その手の関数ぜんぶ組み込み型のバリエーション実装するなんてやってられない。
0861デフォルトの名無しさん
2017/02/16(木) 19:55:01.54ID:fAEKNUKM職業プログラマが、なんて悪い冗談はやめてくれ
0862デフォルトの名無しさん
2017/02/16(木) 19:55:27.26ID:C8BNWAf7コード生成すりゃいいじゃん
まあジェネリックがあれば何もしなくても解決する話だけどな
マイクロソフト仕事しろ
0863デフォルトの名無しさん
2017/02/16(木) 19:57:00.26ID:mpwwbLVV0864デフォルトの名無しさん
2017/02/16(木) 20:00:46.97ID:eA7r2zuiVBAはオブジェクト指向言語としては非常に不完全で、型安全も非常に弱い
クラス使おうがどうしようが変わらんよ
まあ、俺のVBAの認識がその程度だって言うならそれでいいけど
>ポリモーフェィックな動作が要求されているならインターフェースを使う
>Variantを強要するAPIを使うときにVariantから型付きに変換(あるいはラップ)するときにのみVariantを使う
>VBAは割と簡単に型安全性を維持できる
なんて主張するお前のVBAに対する認識の方が俺には疑問だわ
まあ、議論しても分かりあえなさそうだからレス要らないよ
0865デフォルトの名無しさん
2017/02/16(木) 20:09:28.70ID:6YRpUZ/nそれに議論の余地はねえよ
引数と返り値がvariantでも関数の内部まで全部variantで処理するのかって言うね
>Dim x As Integer
>x = x + "2"
>Debug.Print x
>VBAの型安全なんてこんなもんだよ
これなんかは、「こういうコードを書かない」って言うのが大事なんであって書けるからオーケーってのは美意識無さすぎだろう
例え変数がvariantでも足し算するならキャストするだろ
0866デフォルトの名無しさん
2017/02/16(木) 20:10:59.51ID:+lEx52V9そもそも普通の人は開発タブの存在も知らんだろうし
まあ >>792 の職場はパスワード保護も突破されるようなスーパーハッカーだらけなんだろう w
0867デフォルトの名無しさん
2017/02/16(木) 20:11:24.07ID:INRkCvNU君がどう言おうがって、俺は改変する人がいないなんて一言も言ってないよ。
ただし、コードを改変する人が居ないとも思わないけど。
そして、それは論点ではない、ということならもう何度か言ってるんだが。
0868デフォルトの名無しさん
2017/02/16(木) 20:16:07.54ID:eA7r2zui別人?
そう言うコードを書いてOKだとは言ってないよ
とうぜんそう言うコードは書くべきではなくて、ちゃんとキャストすべきだけど
それはVBAが比較的型に安全だっていう発言への反論だからな
そういうコードをチェック出来るのが型に安全だって事じゃないのかと
0869デフォルトの名無しさん
2017/02/16(木) 20:16:28.83ID:+lEx52V9> それは絶対に我慢ならない。(ユーザーが)
> その手の関数ぜんぶ組み込み型のバリエーション実装するなんてやってられない。
必要分だけ実装すりゃいいだろ
Currency 型なんて一生使わない奴の方が多いだろうし
わがまなユーザーなら型云々より文字型だけど数値として検索してくれ("123" で検索したら "0123" もヒットする)って言うような要望の方が多い気がする
0870デフォルトの名無しさん
2017/02/16(木) 20:19:06.26ID:+lEx52V9> そして、それは論点ではない、ということならもう何度か言ってるんだが。
論点でないと言うならレスしなきゃいいんじゃね?
俺は論点をお前に合わせる気はないし義務もないから
0871デフォルトの名無しさん
2017/02/16(木) 20:21:29.95ID:7EemdXzw0872デフォルトの名無しさん
2017/02/16(木) 20:22:44.58ID:+lEx52V9完全じゃないってだけでしょ
程度問題なだけで他の言語にも似たような自動変換はあるし
0873デフォルトの名無しさん
2017/02/16(木) 20:29:25.58ID:6YRpUZ/nなんか横やりすまんな
型が安全じゃないからしっかり指定すべきってことが言いたい?
0874デフォルトの名無しさん
2017/02/16(木) 20:30:36.77ID:eA7r2zui完全じゃないのは当然
程度問題だけど、比較的安全か比較的危険かって話
暗黙の変換、それも縮小変換を実行前にチェックも禁止もできない以上、比較的危険だろって言うのが俺の主張だってだけ
0875デフォルトの名無しさん
2017/02/16(木) 20:34:37.84ID:/2/7lRCGもっとゆるゆるの言語もたくさんあるからそこに噛みついてもそれこそ不毛なだけだね
0876デフォルトの名無しさん
2017/02/16(木) 20:37:09.91ID:GoZ0ZsyN周りに理解者のいない一人社内SEとかやってると本当に色んなヤツに遭遇する。
まじで「余地があれば絶対にやる」ってレベルで問題が起きるし、設計・開発・保守・拡張を一人で回すからコードの一つ一つに拘ってられない。
「とにかくデータをぶち込めば動いてくれる」という関数がないと追っつかない状況も生まれる。
ワークシートに挿入する際にVariant型以外だと表示形式が変わるなど余計な作用を生んだり、関数が文字列で入るなんて事もある。
だからマクロを濫造する上で、Variant型のままで運用し、それが及ぼす影響を理解しておく方が有利という環境もある事を覚えておいてほしい。
0877デフォルトの名無しさん
2017/02/16(木) 20:42:31.73ID:/b6gNV/R0878デフォルトの名無しさん
2017/02/16(木) 20:50:13.72ID:6YRpUZ/n気の毒やね
0879デフォルトの名無しさん
2017/02/16(木) 20:51:15.05ID:eA7r2zui指定すべきがどうかは上で散々やってるけど、俺の意見としてはスタイルの問題でどっちでもいい
俺自身は俺の作るVBAプログラムで型を指定してないのは、手抜きだな
(Variant使うなって話じゃないよ。つかうなら原則As Variantで明示する)
ただ、意識して型指定するのはいいけど
指定したからといって言語側が型チェックをちゃんとやってくれると思うなよって話
0880デフォルトの名無しさん
2017/02/16(木) 20:53:55.17ID:7EemdXzw0881デフォルトの名無しさん
2017/02/16(木) 20:54:30.77ID:INRkCvNUいや、改変云々を論点にしたいならそれでもいいけどさ、
それでどうなるの?
マクロなら改変されなくて入力規則は改変されるっていうのは
個人の感想に過ぎないから証明のしようは無いよ。
このスレでアンケートでも取る?
ほぼ全員がVBA使ってるこのスレじゃ意味無いと思うけど。
0882デフォルトの名無しさん
2017/02/16(木) 21:00:36.04ID:6YRpUZ/nおっしゃる通りである
しかしまあ、変数に入れる値の型が明らかな場合はちゃんと指定すべきだと思うけどね
スタイルの差と言われたらそれまでだけども
>>880
保守が全くいらなければその通り
0883デフォルトの名無しさん
2017/02/16(木) 21:04:42.50ID:GoZ0ZsyN俺はマクロまで改変(というかデバッグボタンポチーからの黄色い行削除)された経験あるわ。
だから出来るだけ何も分からないユーザーの目の前に、マクロの挙動を左右する何かを差し出さない方がいい。
なので全ての入力はVariant型で受け取ってマクロ内で型チェックしてMsgboxで処理出来ない旨のメッセージを発行する。
間違っても実行時エラーのメッセージボックスとかそのまま表示させちゃダメ。
あと全員が全員やるってわけじゃないから作業者を限定するとかマクロ外での対処も有効。
0884デフォルトの名無しさん
2017/02/16(木) 21:07:45.31ID:MMs4mAvC>設計・開発・保守・拡張を一人で回すからコードの一つ一つに拘ってられない。
発狂しそうな環境ですねw
前に見たブログで「キナコ」と名乗っている自称事務系OLさんが書いているコードがもう、ありとあらゆるエラーを想定した
ものだったんだが、現場で実用になるコードってのはこういうもんか、俺にはちょっと無理だなと思ってしまった。
「非常用、押すな」と書いてあるボタンを押したがるバカでも安心して使える設計とか母性が無けりゃ無理なんじゃねえかなw
0885デフォルトの名無しさん
2017/02/16(木) 21:16:50.35ID:eA7r2zui思いついた俺が型指定したいのにVariant使う状況ちょろっと書いとくわ
For Eachで使うループ変数
Nullが必要な場合(DB連携なんか)
こいつらはどうしようもない
後はStatic変数とかで初期化チェックにNothing使うときとかも使うか
>>883
>デバッグボタンポチーからの黄色い行削除
あるねぇ
完璧な実行時エラー排除はなかなか難しい
ACCESSならmde(accde)で配布するからまだマシなんだけどねぇ
EXCELにVBAコンパイルしてコード除去するオプションとかないよな?
0886デフォルトの名無しさん
2017/02/16(木) 21:19:33.55ID:W0y5+uWSなにを主張したいコードなのか説明して
0887デフォルトの名無しさん
2017/02/16(木) 21:39:42.51ID:YyV7ugT9まあ設計に無理があるかミスしてるかだねえ
今作ってるツールでテキストボックスの名前で入力するのを指定してるんだが、命名ミスって仕方なく数値と文字受け入れるようにしてるわ
まあ別にVariant全否定するつもりはないから
「仕方ないとき」はあるからね
0888デフォルトの名無しさん
2017/02/16(木) 21:42:12.62ID:YyV7ugT9受け入れ緩くするのもありだが関数ごとにきっちりエラー処理するのが理想じゃね?
0889デフォルトの名無しさん
2017/02/16(木) 22:14:54.98ID:W0y5+uWSでおとしどこは?
0890デフォルトの名無しさん
2017/02/16(木) 22:29:25.87ID:C8BNWAf7それってさ雑な仕事してるから炎上するんだよね
手抜きのクソコードを書くとそのコードのせいでさらにクソコードを書くはめになる
クソコードはクソコードを呼ぶので加速度的にクソコードが増えていき生産性がガタ落ちになる
ようするに技術的負債ってやつだよ
借金は雪だるま式だ
0891デフォルトの名無しさん
2017/02/16(木) 22:42:46.83ID:XCVAoIB6全角入れないでね、とか言って渡せばいいんだよ。
変なエラー回避に時間かけてるから、
貴方の仕事は遅いのです。
0892デフォルトの名無しさん
2017/02/16(木) 22:53:40.42ID:2OM8+5/j0893デフォルトの名無しさん
2017/02/16(木) 22:56:48.57ID:K21kVzL80894デフォルトの名無しさん
2017/02/16(木) 22:57:04.52ID:GoZ0ZsyN別に炎上したなんて話してないし、むしろVariant型の挙動を利用して生産性第一で作業してるって話なんだけど。
なんかアンカー先間違えてないか。
0895デフォルトの名無しさん
2017/02/16(木) 23:00:55.40ID:3jDFm3bn程度問題ってだけの話
まあお前さんのところはスーパーハッカーの集団みたいだけど w
0896デフォルトの名無しさん
2017/02/16(木) 23:02:47.89ID:3jDFm3bnセルからデータ受けるときは基本 Variant で受けて型判定してるな
0897デフォルトの名無しさん
2017/02/16(木) 23:03:10.14ID:YyV7ugT9on error goto でエラートラップ
そんなに不安なら関数全部につけりゃ良い
チェックするのなんて入力の値だけで良いんだからそんな手間でもないだろ
0898デフォルトの名無しさん
2017/02/16(木) 23:04:12.76ID:YyV7ugT9VBAのスレである以上避けられないから新しい話題くれよ
0899デフォルトの名無しさん
2017/02/16(木) 23:26:38.52ID:qi3MJmNLexcelのカメラ機能(図のリンク貼り付け)を使用している場合VBAを実行した際に明らかに速度が遅くなる現象の原因が分かる方っていらっしゃいますか?
またカメラ機能を使わない以外で上記の現象を回避されてる方はいますか?
0900デフォルトの名無しさん
2017/02/16(木) 23:39:12.04ID:C8BNWAf7でもそれって生産性あげたつもりになってるだけだよ
局所的に見て楽になったような気がするのかもしれないけど実際には問題を増やしてしまっている
こういう雑な積み重ねが保守不能なコードに化ける
Variantから脱却すれば今より仕事が早くなるから考えてみたら
0901デフォルトの名無しさん
2017/02/16(木) 23:41:26.65ID:2OM8+5/j0902デフォルトの名無しさん
2017/02/16(木) 23:56:50.03ID:relaIxlmいいんだよ
Variantで満足してる人は型を求めていない
求めていないものを押し付けても押し返されるだけだよ
さくっとしたマクロとしてもがっつりしたツールとしても使えるんだから用途に応じて使い分ければいい
同様に使う人も多様であっていいんだよ
0903デフォルトの名無しさん
2017/02/17(金) 00:03:22.12ID:Egl82kKQ全部の処理が終わってからカメラ機能を使う
0904デフォルトの名無しさん
2017/02/17(金) 00:24:00.15ID:x+j5W1y3なるほど、ありがとうございます。
ちなみに他ブックを同時に開いている場合に
その他ブックがカメラ機能を使用している場合の対処法は何かありますか?
0905デフォルトの名無しさん
2017/02/17(金) 00:25:05.32ID:LNGtkd31利用側はそうかもしれんけど作る側は潔癖であるべきじゃね?
なかなかできないけど
0906デフォルトの名無しさん
2017/02/17(金) 00:35:35.78ID:ZUGFk9a/0907デフォルトの名無しさん
2017/02/17(金) 01:02:04.84ID:Yk2QF6YV0908デフォルトの名無しさん
2017/02/17(金) 02:14:58.21ID:0Mgboldtこれどうしたら良いの…?
0909デフォルトの名無しさん
2017/02/17(金) 02:28:45.78ID:iYHKBeW3xlPasteAllを指定する
0910デフォルトの名無しさん
2017/02/17(金) 05:48:13.21ID:SExp+Riaべき論はよくわかんないけど細かいルールはプロジェクト単位で決めればいいのよ
全ての人が統一したルールで開発とか無理がある
まずは目的を果たせればいいんだよ
0911デフォルトの名無しさん
2017/02/17(金) 07:02:50.19ID:C9lFCZn00912デフォルトの名無しさん
2017/02/17(金) 07:06:32.57ID:YWoqzdEN大多数のVBAプログラムはそうだし、ここでも暗黙にそういう前提だろうね
0913デフォルトの名無しさん
2017/02/17(金) 07:22:23.36ID:zu1SJ23Xなぜ「型はきちんと合わせて使う」とか
「Variantは極力使わない方が良い」とか言われているのかを
まずきちんと理解していないことには議論にもならないと思う。
逆を言えばそれさえ理解していれば後は作る側の部署なり個人なりの判断だろう。
Variantはほぼ何でも設定出来る便利な型だけど
メモリを圧迫したり暗黙の変換によって意図しない挙動を引き起こしたりする
使い方を知らないと非常に危険な型とも言える。
だから上で誰かが言っていた通り、使うべくして使うところで使うという考え方で良いと思う。
ただ、俺的には全て型宣言無しである程度の大きさのプログラムを組むような暴挙に出ることは
辞めておいた方が良いとは思うけどね。
0914デフォルトの名無しさん
2017/02/17(金) 07:37:21.18ID:hoKx2dYD他人が関係しない小さい、狭い範囲内なら何やってもいいけど
0915デフォルトの名無しさん
2017/02/17(金) 08:09:54.80ID:6fUPUfvd限られた範囲内で可能なかぎり品質の良いコードを書く努力をすべきだ、という話
VBAだとメンテナンス性とか軽んじられるからね
うちの現場はコーディング規約もありゃしないからひどいもんよ
だから俺の場合は自己満だけどね
0916デフォルトの名無しさん
2017/02/17(金) 08:37:35.15ID:57XKQRPM「型宣言なし」の話は議論になってないよ。
0917デフォルトの名無しさん
2017/02/17(金) 08:37:52.73ID:57XKQRPM仕事の話はやめるべきだ。そもそもプロのプログラマが語り合う場じゃないし。
0918デフォルトの名無しさん
2017/02/17(金) 09:21:29.04ID:4vjdAmpkすべて型宣言なし = 全部variant
0919デフォルトの名無しさん
2017/02/17(金) 10:01:59.38ID:/Ik0xHA1えっ?
0920デフォルトの名無しさん
2017/02/17(金) 10:34:33.71ID:iYHKBeW3雑談スレはちゃんと別に用意されてる
0921デフォルトの名無しさん
2017/02/17(金) 11:32:15.12ID:t6AZ1KOU他ブックはデータソースですか?
だとしたら、そのブックでカメラ機能を使わないという選択はできますでしょうか。
見栄えを良くして重くなったファイルをデータソースにするのではなく、目的がデータ保存だけのファイルを作って、それを参照して見栄えの良いファイルを複数作るという考え方です。
0922デフォルトの名無しさん
2017/02/17(金) 11:43:15.20ID:57XKQRPMここでの「仕事」つったらExcelを仕事に活用しているビジネスマンのやってる事だよ。
プロが現れて「プロならこうあるべき」なんて見たこともない。ドン引きそのものだ。ツイッターでやれ。
自分の職業をわざと貶めてるのか?
0923デフォルトの名無しさん
2017/02/17(金) 12:52:58.35ID:loItl+7kどの板に書いてるのかをよ〜く考えてからレスしなよ...
0924デフォルトの名無しさん
2017/02/17(金) 12:58:20.11ID:57XKQRPM音楽板にプロのミュージシャンは日常的に出てこないしスポーツ板にJ選手は出てこないしカメラ板にプロカメはこっそりしか出てこないわ。
奇異に感じねーのか?
0925デフォルトの名無しさん
2017/02/17(金) 13:00:23.80ID:zgFjy358dim b as long
a = range("A1").value
' aが整数値であることのvalidationコード
b = a
みたいなコードを書いてるんですかね、このスレのプロ様は
0926デフォルトの名無しさん
2017/02/17(金) 13:05:22.14ID:6fUPUfvd所詮サラリーマン
0927デフォルトの名無しさん
2017/02/17(金) 16:07:46.96ID:fQ7GKGL6何言ってんだよ。
返り値が1次元だろうが2次元だろうが配列で返せる。
ただ、俺の例もそうだけど、こういう関数事態が糞関数だ。
引数が1次元でも2次元でもOKという時点で地雷臭がする。
こういうコード書く奴はエラー処理も碌にしないことが多い。
逆に型をきちんと指定する奴は、エラー処理の想定込みで指定する。
0928デフォルトの名無しさん
2017/02/17(金) 16:19:46.97ID:loItl+7kん?
> ここでの「仕事」つったらExcelを仕事に活用しているビジネスマンのやってる事だよ。
に突っ込んでるんだが?
Excel の使い方の話ならよそでやってくれよ
0929デフォルトの名無しさん
2017/02/17(金) 16:44:49.17ID:57XKQRPM1次元ならLong値を返す、と書いてるじゃないか。
あとこれは完全に後出し(書き忘れた)なので根拠にはしないけど、見つからなかった場合はEmpty を返したい。
それとこういうライブラリ関数はあまり丁寧なエラー処理はしないよ。アプリに近い上流側でやるべき。
0930デフォルトの名無しさん
2017/02/17(金) 17:24:57.59ID:fQ7GKGL6だからそんな関数は作っちゃダメなんだよ。
設計してないからそんなことになってるんだろうけど。
だからエラー処理は受ける前にやるの。
変な引数自体受け取らないで済むように。
丁寧に作る時は両方でやることもある。
0931デフォルトの名無しさん
2017/02/17(金) 17:33:56.58ID:fQ7GKGL6どんな型でもOKな配列からサーチすることなんて殆ど有り得ない。
本来なら型指定の配列からサーチする関数でもOKな所を便利だからと使ってるだろうと推測する。
→それはどんな変数でもVariantにするのと全く同じ弊害を持つことになる。
0932デフォルトの名無しさん
2017/02/17(金) 17:36:48.43ID:fQ7GKGL6これだけでもレベルが分かる。
0933デフォルトの名無しさん
2017/02/17(金) 17:40:48.67ID:zgFjy358> だからエラー処理は受ける前にやるの。
> 変な引数自体受け取らないで済むように。
呼び出し側でエラーチェックするってことか?
プロ様は大変ですな
0934デフォルトの名無しさん
2017/02/17(金) 17:52:20.28ID:57XKQRPMエラー処理は渡す側の責務と受けとる側の責務に分けられるが、例えば平方根を求める関数でマイナス値のチェックなど普通はしない。
0935デフォルトの名無しさん
2017/02/17(金) 18:05:05.67ID:fQ7GKGL6全然大変じゃない。
インテリセンスからでも渡して良いものがわかるし、他の奴が使ってもおかしなことになりにくい。
他の奴が作ってても型指定してあれば使い方も分かりやすい。
むしろ何でも受け取るような関数作る方が後々大変なことになる。
Sub Test1()
Debug.Print LongToString("ABC")
End Sub
Function LongToString(varIn As Variant) As Variant
LongToString=varIn*3
End Function
Test1を書いてる時に"ABC"ではダメだと気付かない。
型指定してあればインテリセンスから"ABC"なんて入れることは有り得ない。
0936デフォルトの名無しさん
2017/02/17(金) 18:06:26.44ID:6fUPUfvdlongがほしいならisnumericでセルの値を時かにチェックすればよろしくないか
どちらにしてもその値を処理するならどんな値かのチェックは必要だと思うんですが
0937デフォルトの名無しさん
2017/02/17(金) 18:08:34.57ID:fQ7GKGL6それは型指定しててもあり得るだろ。
引き数をVariantにした平方根を求める関数でマイナスをチェックするなら型指定しててもするだろう。
0938デフォルトの名無しさん
2017/02/17(金) 18:10:40.07ID:57XKQRPMFunction 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
0939デフォルトの名無しさん
2017/02/17(金) 18:15:31.89ID:fQ7GKGL6そもそも他言語を知ってればVariantでOKという発想にはならんだろう。
もっともOKな奴がいるからVBが不評なんだけどな。
0940デフォルトの名無しさん
2017/02/17(金) 18:18:49.17ID:6fUPUfvd片付けがあやふやなんだから指定しなくてokってのがいるけど、そら逆でしょって思うわ
0941デフォルトの名無しさん
2017/02/17(金) 18:25:09.55ID:zgFjy358Function 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箇所でやるのか
お疲れ様です
0942デフォルトの名無しさん
2017/02/17(金) 18:26:21.82ID:fQ7GKGL6そんなの見た瞬間から気付いてたが関数の中身が無いから一概に間違いとも言えない。
配列(Variant)を配列に入れることもある。
実際に俺も()付きの方の関数作ったことある。
Variantは普通は使わない方が良いが、例外の定番であるRangeをVariantで受けて高速化する方法でRangeが複数の場合がこれに該当した。
戻り値はVariantじゃ無かったけど。
0943デフォルトの名無しさん
2017/02/17(金) 18:33:49.68ID:zgFjy358取り得る戦略はいくつもあるし
型を明示する場合でも
dim a as long
a = range("a1")value
1. デフォルトのruntime errorでエラー検知のみ
2. on error gotoでエラートラップ
3. セル参照時に1個1個validation
毎回3やれとか言われても疲れるし
0944デフォルトの名無しさん
2017/02/17(金) 18:34:02.47ID:TnLGa8QJちょっと前に同じ現象ではまりました。困ったバグです。
カメラ機能の使用数に対し、等比級数的に処理時間が遅延。
オンメモリなら自/他ブックの区別なく影響を受けます。
要はカメラ機能を維持していることがNGなので、必要な時に更新して
機能を止めればいいです。
実はShapeオブジェクトに参照式が入っているだけなので、
ソースセル内容編集
→ Shapes(1).DrawingObject.Formula=(参照範囲)
→ Calculate
→ Shapes(1).DrawingObject.Formula=""
これでShape内の画像は残り、リンクは切れてただの図形になります。
2〜3個あったカメラのリンクを切ったことで、数百秒に遅延した
シートイベントがmsecレベルに短縮されました。 ご参考まで。
ちなみにScreenupdatingの制御は逆に遅延の原因になることがある
ので注意して使うほうがよいです。
0945デフォルトの名無しさん
2017/02/17(金) 18:35:34.78ID:57XKQRPMん?「受ける前にやる」って呼び出し側でやるって意味か?
0946デフォルトの名無しさん
2017/02/17(金) 18:35:59.64ID:fQ7GKGL6インテリセンス知らんのか?
書けても実際には書かれない。
分かる?初心者君。
100個所呼び出すって何だよww
ユーザ―インターフェースと関数を分離する意味が分からないなら関数作らずに全部イベントの所に書いてろw
0947デフォルトの名無しさん
2017/02/17(金) 18:37:51.59ID:zgFjy358実引数のチェックは100%やるべき
余裕があったら関数内でもやるけどね
って意味だと取った
ふつー逆でしょ
0948デフォルトの名無しさん
2017/02/17(金) 18:40:11.45ID:57XKQRPMいやそれは書けん(関数本体に入る前にエラー)だろ
0949デフォルトの名無しさん
2017/02/17(金) 18:40:47.16ID:zgFjy358> 書けても実際には書かれない。
またへんなこと言い出した
もしそうなら、実引数のチェックなんていらないよね
だって、間違った型の変数渡さない(書かない)ってことでしょ?
0950デフォルトの名無しさん
2017/02/17(金) 18:42:27.09ID:zgFjy358関数に入る前って実行時ってことでしょ?
書けてるじゃんw
0951デフォルトの名無しさん
2017/02/17(金) 18:44:30.55ID:zgFjy358> 100個所呼び出すって何だよww
何だよって、関数吐くったら呼び出すのは1回だけかよ
頭痛くなってきた
0952デフォルトの名無しさん
2017/02/17(金) 18:45:06.96ID:6fUPUfvd楽に書きたいんだったらon error gotoで良いんじゃね
そんなんはvariantでやろうがなんだろうが一緒だろ
>>941の例なんかだと、ユーザー側が間違った記述してんだからエラー吐いて当然でしょ
それを許容して返り値で判断させる関数を求められてるならそういう作りにするだけ
0953デフォルトの名無しさん
2017/02/17(金) 18:45:55.53ID:57XKQRPM0954デフォルトの名無しさん
2017/02/17(金) 18:48:28.19ID:zgFjy358ある関数の前提条件を誰が担保するかの話をしてるんだけど
仮に呼び出し側が担保すべしというポリシーにしたとしても、間違った型の値は渡されうる
だって、書けちゃうんだから
だから、担保するなら呼ばれる方
0955デフォルトの名無しさん
2017/02/17(金) 18:52:31.72ID:6fUPUfvd何だか俺横槍がまずかったみたいだな
とりあえず俺のレスは取り下げで
0956デフォルトの名無しさん
2017/02/17(金) 19:00:12.08ID:fQ7GKGL6だから何で分からんの?バカなの?
LongTοString(
までキー入力した時にvarInがLongだと分かるんだから"ABC"入れてもエラーになると分かるから書かれない。
For i=1 To 100
If IsNumeric(a) Then 'aの範囲気にする処理なら別のチェック
b=LongToString(a)
EndIf
Next i
とすればそもそも1度も呼び出されないこともある。
こんなのは関数の使われ方によって変わる。
場合によってはVariantで受けることも有るだろう。
そういう、状況を無視して100個所とか言うから笑われるんだよ。
0957デフォルトの名無しさん
2017/02/17(金) 19:02:20.94ID:57XKQRPM間違ってるな。
呼び足す側がコントロールできることは呼び足す側が責任をもつ。
処理過程で発生するエラーなどは呼びだされる側でしかコントロールできないから呼び出される側でチェックする。
「引数が正しい型か?」は呼び出し側で静的にチェックできること。
0958デフォルトの名無しさん
2017/02/17(金) 19:09:34.20ID:57XKQRPMそれを踏まえて、
同じアルゴリズムを違う型に適用するためコピペして関数名を変えて使うのは最低の行為だ。
0959デフォルトの名無しさん
2017/02/17(金) 19:21:54.70ID:fQ7GKGL6お前のやり方では使う方がvarInに"ABC"入れてダメなのかが分からない。
それで入れて実行時にエラー処理ではねられる。
というよりその関数の使い方が分かりにくい。
それだったら関数なんて作らない方が良い。
0960デフォルトの名無しさん
2017/02/17(金) 19:27:49.71ID:fQ7GKGL6平方根求める関数ならどういう処理か分かるだろ。
別に後に作る場合でも関数がどうであるべきかを考えて実装する。
そもそも何でもVariantで良いなら型なんて必要無いだろ。
もしかしてVBScriptの方が正しいと思ってる?
0961デフォルトの名無しさん
2017/02/17(金) 19:30:25.17ID:h6UWdVSZ悪意あるユーザがスタックオーバーフローとかインジェクションとか目的としてたらセキュリティ的にまずい事になる
0962デフォルトの名無しさん
2017/02/17(金) 19:33:24.00ID:DzGsmJeY0963デフォルトの名無しさん
2017/02/17(金) 19:44:57.51ID:DzGsmJeY0964デフォルトの名無しさん
2017/02/17(金) 19:45:19.30ID:loItl+7k人に使ってもらうマクロならその程度のチェックは当たり前にやるけど?
0965デフォルトの名無しさん
2017/02/17(金) 19:47:28.23ID:57XKQRPMそれは上流の話だな。下流では「謝った引数を入れたら結果は未定義」でok
0966デフォルトの名無しさん
2017/02/17(金) 19:54:46.13ID:57XKQRPM・エラーが起こる条件が明確
・その条件に当てはまるかどうか事前に確認できる
この二つを満たすように工夫してるし、実現できた場合はエラーチェックは「しない」
0967デフォルトの名無しさん
2017/02/17(金) 20:00:13.54ID:6fUPUfvd型が違うってのは結果が違うんだぞ?
上の例みたいに例外の場合emptyを返すって用件ならそりゃvariantだろうけども
少なくとも明示的にどんな値が返るのかわかるような関数じゃないと色々まずいだろ
0968デフォルトの名無しさん
2017/02/17(金) 20:01:41.42ID:h6UWdVSZユーザが使って業務がストップしたらまずくね?
いくらテストしてもバグがないことは証明出来ないよ
0969デフォルトの名無しさん
2017/02/17(金) 20:12:43.27ID:8qknrLBgユーザー定義関数なのに定義を追っていって中身を確認出来ない状況とか、
実行時エラーが会社の命運を決めるような事態を引き起こすとか、
そんなものをエクセルで動かす狂気の会社なんかあるわけないだろ。
・・・ないよな?
0970デフォルトの名無しさん
2017/02/17(金) 20:18:39.08ID:LyP8mvbq"Variant型を議論するスレ"
見たいなの作って そこでやって欲しい気分だな
0971デフォルトの名無しさん
2017/02/17(金) 20:34:36.32ID:0Mgboldtちゃうねん
関数とか他シートの参照とかでごちゃごちゃしたシートから
値だけ入ったシートを作るために四の五のしてからPasteSpecialのxlPasteValuesAndNumberFormatsを指定して貼り付けてるんだけど
そうすると何故か数値になってる部分が全部文字列扱いになるの…
なんか俺オプションの勘違いしてるかな
0972デフォルトの名無しさん
2017/02/17(金) 20:36:15.65ID:57XKQRPM型は静的に指定できるじゃないか。
'***この関数の引数と返り値の関係は以下の通りです***
'1次元配列→Long値
'2次元配列→長さ2の 1次元配列
'N次元配列→長さNの 1次元配列
'ただし見つからなかった場合は Empty
'配列の各要素とターゲットの値は = で比較可能であること
'**************+++++++++++
誰も困らないだろ
0973デフォルトの名無しさん
2017/02/17(金) 20:38:15.99ID:DzGsmJeY動的ですね
0974デフォルトの名無しさん
2017/02/17(金) 20:38:20.38ID:loItl+7k会社の命運はないと信じたいけど
今日はB子ちゃんとデート♪
これを処理してっと...
ピポッ
エラー 13 「型が一致しません。」
お前らの命運やいかに
0975デフォルトの名無しさん
2017/02/17(金) 20:41:06.37ID:57XKQRPM静的に「指定」できる
関数の挙動はそりゃ動的だよ。
でも引数と返り値の関係は静的。
0976デフォルトの名無しさん
2017/02/17(金) 20:44:59.92ID:3DJT3WqG例としてはA1をコピーして図のリンク貼り付け→A1〜A3を結合した図が出る
問題なく貼り付けられる場合もあるし・・・よく分からん
0977デフォルトの名無しさん
2017/02/17(金) 21:04:06.39ID:BVl9fCvEそもそもこんな関数作ってもありがたみない
2次元含めて多次元配列なんて滅多に必要ないし生産性を下げるだけ
2次元配列を使う人って多分シートというユーザーインターフェースに気が付かないうちに束縛されてるんだろうな
素人にはインターフェースとビジネスロジック分離は難しいからね
0978デフォルトの名無しさん
2017/02/17(金) 21:15:02.13ID:8qknrLBgギャグかな?
0979デフォルトの名無しさん
2017/02/17(金) 21:15:54.92ID:57XKQRPMん、ああ。 確かにそうだ。
多次元配列は酸っぱいからな。
0980デフォルトの名無しさん
2017/02/17(金) 21:20:54.24ID:W6pJInKuInputBox文の後に追加
↓
On Error GoTo myError
End Subの前に、入力エラー時の回避先を追加
↓
myError:
MsgBox "入力データの型が不正です。"
0981デフォルトの名無しさん
2017/02/17(金) 21:27:09.14ID:UWNS+iP1素晴らしい見識をお持ちだ。
是非方法論をお伺いしたい。
0982デフォルトの名無しさん
2017/02/17(金) 21:35:53.77ID:BVl9fCvEごく普通にオブジェクト指向でコードを書くだけ
自然と2次元以上の配列がコードから消え去る
VBAコーダーはクラスもまともに使えない人ばかりだからわからないだろうけどね
0983デフォルトの名無しさん
2017/02/17(金) 21:42:04.44ID:/Ik0xHA1ほほー
するとn次元配列と比較して
どういったメリットを得て
デメリットはどうなる?
ケーススタディはどうなるかな?
0984デフォルトの名無しさん
2017/02/17(金) 21:42:55.04ID:6fUPUfvd最近大量のエクセルデータ扱うツールも作ってないし
配列よりコレクション使った方が取り回し良いしな
ボリュームを決めなきゃいけないリストの場合は配列使うが
0985デフォルトの名無しさん
2017/02/17(金) 21:56:35.30ID:BVl9fCvE多次元配列という柔軟性のない使いにくいわかりにくい物理的な構造から解放されてモデリングが容易になる
優れたモデリングはプログラムの保守性や拡張性を向上するために必須って常識だよね
逆に疑問なんだがビジネスで多次元配列を多用するってどこの業界なんだ?
仕事しててもそういう話って聞かないから気になる
0986デフォルトの名無しさん
2017/02/17(金) 21:57:21.66ID:YWoqzdEN単独の便利クラスを作ったり使ったりするのはありなんだけど体系だったものを作るのは難しい。
というか使い捨てになってしまう。
複数のクラス体系に対応した共通のアルゴリズムというのを事前に構築することができないんだよ。
0987デフォルトの名無しさん
2017/02/17(金) 22:00:32.92ID:57XKQRPM配列は抽象度が低い←わかる
だがクラスオブジェクトの配列じゃ縦横に可変長という構造は作れない
0988デフォルトの名無しさん
2017/02/17(金) 22:01:19.36ID:Q0oePE6a0989デフォルトの名無しさん
2017/02/17(金) 22:03:31.40ID:DzGsmJeY二次元可変配列が必要となる状況が想像できない
0990デフォルトの名無しさん
2017/02/17(金) 22:09:04.09ID:8qknrLBg「二次元配列なんかいらねぇ!」って言い出すくらいなら、適切な開発環境の選定をもうちょっと真面目にやるべきだと思う。
0991デフォルトの名無しさん
2017/02/17(金) 22:11:59.19ID:BVl9fCvEそれは錯覚だな
例えばスパース行列とかはインターフェースはまるで2次元配列のようだけど中身は全然2次元配列じゃないクラスだよね
もちろん多次元配列っぽいインターフェースがそもそも必要になることは少ないが
0992デフォルトの名無しさん
2017/02/17(金) 22:21:00.23ID:57XKQRPMDim arr() As Object
ReDim arr(0 To m , 0 To n)
ってできるんだし。
0993デフォルトの名無しさん
2017/02/17(金) 22:21:15.87ID:BVl9fCvEこれがまさにスプレッドシートというユーザーインターフェースに束縛された状態
なるほど、確かにユーザーインターフェースはスプレッドシートだし、ぼんやり眺めるとバリアントの2次元配列のように見える
しかしながら、内部的な処理まで2次元配列で行う必要は本当にあるのだろうか
2次元配列のわかりにくいコードを書くよりも、型安全でオブジェクティブな構造に変換してから、手強いビジネスロジックに立ち向かったほうが、健全なコーディングができそうだ、とは思わないのだろうか
0994デフォルトの名無しさん
2017/02/17(金) 22:28:03.46ID:8qknrLBg処理結果をセルに保存しないならエクセルで処理する理由がないし、
セル一つ一つにアクセスして結果を保存してるならただの馬鹿なんだけど。
それとも最終的に二次元配列に加工する場合でも、
中間段階では二次元配列を使わないから「めったに使わない」と表現してるんだろうか。
0995デフォルトの名無しさん
2017/02/17(金) 22:29:19.82ID:57XKQRPMオブジェクトの1次元配列は作らないのか?
そこから条件に合致したオブジェクトを探すという操作は発生しないのか?
そのとき>>972のような関数がそのまま使えたら便利だとは思わないか?
(= で比較可能ってのはダメだが)
0996デフォルトの名無しさん
2017/02/17(金) 22:37:51.46ID:/Ik0xHA1長さnのn次元配列
意味が分からん。
なんの長さよ
0997デフォルトの名無しさん
2017/02/17(金) 22:44:58.32ID:BVl9fCvEセルに保存するだけしかしてないならそれこそ勿体無い馬鹿
それは遅いから配列取り出して書き込めってことか?
滅多に使わんというのはそういうことだよ
シートとの境界では仕方なく使うことはあるけど、そうじゃなきゃ滅多に使わんし、使う理由もない
0998デフォルトの名無しさん
2017/02/17(金) 22:49:38.85ID:57XKQRPM>>972のことか?
返り値だ。
N次元配列からのサーチ結果はターゲットが見つかったとしたら
(x1, x2, ..., xn)
という長さNの1次元配列になるということだ。
つまりインデックス長だ。
0999デフォルトの名無しさん
2017/02/17(金) 22:50:36.99ID:AYehqi+e1000デフォルトの名無しさん
2017/02/17(金) 22:50:55.49ID:AYehqi+e10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
life time: 45日 19時間 59分 39秒
10021002
Over 1000Thread運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
http://premium.2ch.net/
▼ 浪人ログインはこちら ▼
https://login.2ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。