Excel VBA 質問スレ Part39 [転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2015/11/27(金) 20:36:45.35ID:9HV+ag/s___
___ /____ヽ ____
/____\ | |´・ω・`| | /___ヽ
.l |´・ω・`| ニX二 . ̄ ̄ ̄ 二X二 |´・ω・`| l 俺たちに任せろ
!、 ̄ ̄ ̄ ヽ | | /  ̄ ̄ ̄/
ヽ_/ヽ、 ヽ__) \__/\_/. /_/ ノヽ_/
 ̄  ̄ ̄
このスレはコード書き込みOKです。
作成依頼もOKですが、作成依頼限定ではありません。
コードが嫌な人・作成依頼が嫌な人は別スレ建ててください。
※前スレ
Excel VBA 質問スレ Part38 [転載禁止]2ch.net
http://peace.2ch.net/test/read.cgi/tech/1441619979/
0746デフォルトの名無しさん
2016/02/05(金) 15:58:15.69ID:VJfh6At3無事にできました。
ご教示ありがとうございます。
0747デフォルトの名無しさん
2016/02/05(金) 21:58:27.26ID:qfst1uAUそのプロシージャ内でApplication.Caller で呼び出し元を調べると
"角丸四角形 1" とか出てくるけど、その図形のNameプロパティーを調べると
”Rounded Rectangle 1" っていうふうに英語名で出てくる。
シート上の複数の図形から同じプロシージャを呼び出して、
呼び出し元の図形の列位置(Column)に応じて処理を分岐させるってのをやりたくて
こんなコード書いたんだけど、
Application.Caller の結果と Nameプロパティーが違うんで上手くいかなかった。
Sub Test()
Dim v As Variant
Dim shp As Shape
Dim clm As Long
v = Application.Caller
For Each shp in Thisworkbook.Sheets(1).Shapes
If shp.Name = v Then
clm = shp.Column
Exit For
End If
Next shp
End Sub
できればどっちか(なるべくなら英語のほう)に統一したいんだけど、
どうすりゃいいの?
0748デフォルトの名無しさん
2016/02/05(金) 22:08:37.95ID:blBw672YActiveSheet.Shapes(Application.Caller).Name
あたりで英語の名前が取得できるはず
0749デフォルトの名無しさん
2016/02/05(金) 22:27:47.03ID:RDrjDYLW複数の画像をシートに配置し1画像をクリックしたら個々の処理をしたい
そのマクロを画像数に関係しないで1ルーチンでしたい、、ってことかな?
0750デフォルトの名無しさん
2016/02/05(金) 22:33:57.04ID:qfst1uAU早速の回答ありがとうございます。
Sub Test()
Dim ws As Worksheet
Dim str As String
Dim shp As Shape
Dim clm As Long
Set ws = ThisWorkbook.Sheets(1)
str = ws.Shapes(Application.Caller).Name
For Each shp In ws.Shapes
If shp.Name = str Then
clm = shp.TopLeftCell.Column
Exit For
End If
Next shp
Set ws = Nothing
Debug.Print clm
End Sub
おかげさまで無事に期待通りの動作になりました。
0751デフォルトの名無しさん
2016/02/05(金) 22:36:08.61ID:qfst1uAUすみません、リロードしてなかったので気付きませんでした
>そのマクロを画像数に関係しないで1ルーチンでしたい、、ってことかな?
そうです、そんな感じです
0752デフォルトの名無しさん
2016/02/06(土) 08:53:13.29ID:P3+owK3wおいらの場合だが、、画像を貼る時
ユニーク(唯一)な画像名を入れ、実行するマクロ名は全て同一にしている
マクロのほうでクリックされた画像名を取得すれば、どうにでもできる
0753デフォルトの名無しさん
2016/02/06(土) 09:06:55.95ID:P3+owK3wobjshape.name
マクロの登録については
selection.onactionあたりをgoogってw
0754デフォルトの名無しさん
2016/02/06(土) 15:32:47.34ID:lnO4bcRFセル範囲をctrol+Cとかでクリップボードにいれた状態で
その内容をVBAで配列等にしたい場合、内容を地道にCRLFとHTでsplitするしか方法がないのでしょうか
0755デフォルトの名無しさん
2016/02/06(土) 19:18:20.53ID:o+SuU72l質問の答えは>>738の通りと思うけど気になった点を2つほど
・A6以降の値を調べるならループ必要だけど、A6のみなら最初のDoループは不要では?
・最後のExit Subは自分なら書かないかな(なくても問題ないため)
0756デフォルトの名無しさん
2016/02/06(土) 19:26:54.79ID:k9/r4E4xなぜクリップボードに入れる前に普通にValueプロパティで配列化しないの?
0757デフォルトの名無しさん
2016/02/06(土) 19:29:16.46ID:d/rSshNVRangeオブジェクトを使う方向で考えた方がいい
Rangeから配列へはVariant変数にただ代入するだけ
0758デフォルトの名無しさん
2016/02/06(土) 19:48:03.96ID:eyuorlkiググったりしてたんですが意味わからんものでしてそれぞれのプログラムの説明も良かったら頼みます
やりたいことはコマンドプロンプトのコマンドの実行とコマンドプロンプト画面を表示したくないためです
0759デフォルトの名無しさん
2016/02/06(土) 20:00:25.86ID:lnO4bcRF通常なら提言通りの方法でやるのですが
システムの関係でExcelのインスタンスが2つになってるんです
そこでインスタンスAでCtrol+CをしてインスタンスBでマクロを動かし
クリップボードのセル範囲情報を取り出そうとしているんです
0760デフォルトの名無しさん
2016/02/06(土) 20:54:04.56ID:l536E6T4retval = Shell("c:\t\t.bat", vbHide)
0761デフォルトの名無しさん
2016/02/06(土) 21:16:39.44ID:eyuorlkiググったら「ExecかRunをWScript.Shellで実行」できるというのを見たんですがそれらと
>>760の実行は何か違いがあるんですかね?
それとググったら発見したんですが
CreateObject("WScript.Shell").Run "CMD.EXE C:\>コマンドプロンプトのコマンドの実行文", 0
これでも通じますか?また通じたとしたら何か問題ありますかね?
0762デフォルトの名無しさん
2016/02/06(土) 21:25:25.27ID:d/rSshNV基本Excelの中身ってCOMだからGetObjectでBからA見たりできるよ
getobject 複数 インスタンスでぐぐれ
0763デフォルトの名無しさん
2016/02/06(土) 21:29:36.07ID:l536E6T4字数の多いのは機能も多いだろう
軽自動車か高級車の違いで
コンビニ行くなら同じ
0764デフォルトの名無しさん
2016/02/06(土) 21:40:35.45ID:eyuorlkiつまり>>760この実行文は余計なものを省いたような文なんでしょうかね?
それだったらありがたいんですがその実行文は何をしてるんですかね?
良かったら説明お願いします
0765デフォルトの名無しさん
2016/02/06(土) 21:53:20.80ID:P9swx1tr× "CMD.EXE C:\>コマンドプロンプトのコマンドの実行文"
○ "CMD.EXE /C コマンドプロンプトのコマンドの実行文"
ですよ
×の方でやったらループして動かなくなった(EXCEL2016)
ちなみに
RC = CreateObject("WScript.Shell").Run("CMD.EXE /C コマンドプロンプトのコマンドの実行文", vbHide , True)
なら
マンドの実行終了を待ち合せてくれて 実行結果の終了コード(番号)が返ってきます(通常 正常終了は 0)
これは Shell関数は使えない。
0766デフォルトの名無しさん
2016/02/06(土) 22:07:31.95ID:eyuorlkiそれで実行できました
ところで
CreateObject("WScript.Shell").Run "empty *", 0
この実行文は前に作ったものなんですが違いはなんなんでしょう?
0767デフォルトの名無しさん
2016/02/06(土) 22:14:02.79ID:cR3OuN6O特定のOSの機能を使いたいのかはっきりさせてほしいところだ。
0768デフォルトの名無しさん
2016/02/06(土) 23:55:45.18ID:eyuorlkiタスク機能でバックグランド実行しようとしてたんですわ
0769デフォルトの名無しさん
2016/02/07(日) 00:08:40.73ID:z3M1lb5nPowerShellでええやろ。
PowerShell_ISE でも使って見れば?
WSH, VBScript もあるし
0770デフォルトの名無しさん
2016/02/07(日) 01:04:57.37ID:S151Vk4MExcelの右クリックにメニュー追加したいんですが、右クリックメニューって何種類ありますか?
Application.CommandBars("Cell")とかでRowとかいろいろあると思うんですが。
もしくは右クリックメニューすべてに追加するみたいな方法ってあるのでしょうか。
0771デフォルトの名無しさん
2016/02/07(日) 10:07:38.16ID:GylIyJ2o昔はxp上のエクセル2003で作ってました。
今回はWindows7 32ビット
エクセル2013 32ビット
で作ります。
はあ
0772デフォルトの名無しさん
2016/02/07(日) 12:20:07.64ID:lxD2jtcx0773デフォルトの名無しさん
2016/02/07(日) 13:13:51.34ID:lvVeevWi知らないんだけどExcel使う上でも違いってあるの?
0774デフォルトの名無しさん
2016/02/07(日) 15:50:17.72ID:YehISXuUhttp://qiita.com/sjuny/items/d3bf8e4dd9e609374575
0775デフォルトの名無しさん
2016/02/07(日) 16:04:51.64ID:Ah5srJ1tまあ絶対こないけどな
0776デフォルトの名無しさん
2016/02/07(日) 21:17:08.90ID:8jeH5Cxfこれは酷いな
文字化け起こすわ正規表現使えないわ
ScriptingDictionary使えないから
書き換えたいときはCollectionラッピングしてイテレート使えとか
しれっと言ってるけどVBAの知識しか持ってない奴には
何が何のことか分からないだろうしな
エラーは違うモジュールやクラスまたがるとスコープ外れることがあるから
WindowsのVBAでもRaiseに限らず気をつけるけど
.Netの参照もろくに使えないで、APIも貧弱だとしたらもう
何をどうしろと言うのだという感じになるだろうな。お手上げだ。
0777デフォルトの名無しさん
2016/02/08(月) 08:35:37.46ID:74LZCTztテメェの会社のソフトウェアすらまともにポーティング出来ないってのも
笑えるなww 今時、マルチプラットフォームなんて当たり前の時代に。
0778デフォルトの名無しさん
2016/02/08(月) 12:16:06.90ID:9AywMO4KそのときLayoutをAndroid開発のように手軽にする方法ってないものなのですか?
現状ではいちいち各要素のLeftプロパティやTo@プロバティやWidthプロパティをわざわざ計算して代入していますが。
0779デフォルトの名無しさん
2016/02/09(火) 02:12:59.07ID:fm/+QtdnEXCELVBAからWindowsPhoneにプラットフォームを変える
0780778
2016/02/09(火) 10:27:16.61ID:kyiA5+yGあまりわたしを怒らせないほうがいいぞ。
しばらくこのスレに住みつくんだからな。
0781デフォルトの名無しさん
2016/02/09(火) 11:33:24.91ID:6l1mZ7CBコテ付けておいてくださいね?
0782デフォルトの名無しさん
2016/02/09(火) 12:02:55.92ID:nKvXEyw20783デフォルトの名無しさん
2016/02/09(火) 13:36:12.19ID:nKvXEyw2ファイル名とセル名で特定の場所が一致していた場合そのファイルとセルを紐付けるハイパーリンクを挿入するにはどのような構文が必要でしょうか?
例 abc0001xxxx.pdfというファイル名のファイルとセルがあった場合に
abcとxxxxは参照せずに
0001の部分と .pdfの拡張子のみで判別して合致したものにハイパーリンクで紐付けする。
0784デフォルトの名無しさん
2016/02/09(火) 13:42:51.44ID:f4xX8fNKファイル名の集合は検索前に固定されてるの?
0785デフォルトの名無しさん
2016/02/09(火) 13:55:54.83ID:nKvXEyw2ファイル名は法則はあるけど全部が完全な固定じゃなくて100 -(ハイフン)の後ろ3桁とかで検索したい。
ファイル名の構成は
(特定のものだけいれる単語)(分類別の文字2桁)200-(固有の番号)(分類別の文字2〜3桁.pdf)
って感じ。
200-(ハイフン)は固定
0786デフォルトの名無しさん
2016/02/09(火) 14:23:18.20ID:nKvXEyw20787デフォルトの名無しさん
2016/02/09(火) 14:58:50.32ID:6l1mZ7CBVBAが最近嫌になってきたわ。
0788デフォルトの名無しさん
2016/02/09(火) 14:58:58.23ID:f4xX8fNKそういう文字列のパターンに合致したもの全部にリンクを貼るの?
それとも実際存在しているファイル名かどうかも考慮するの?
0789デフォルトの名無しさん
2016/02/09(火) 15:06:16.15ID:j0ZWcdvLどう違うのか教えて
0790デフォルトの名無しさん
2016/02/09(火) 15:19:03.63ID:nKvXEyw2ファイル名に固有の数字を持ってるから1つしか一致しない。
セル内の固有数字と同じものが存在しない場合っていうのは基本的にあり得ないけど存在しなかったらリンクしないでほしい
0791デフォルトの名無しさん
2016/02/09(火) 17:30:49.91ID:FJrhS/CA実行中のマクロが、
エラーメッセージや中断ダイアログも何も出ずに、
途中で終了してしまうことがあります。
多数の重いブック(大きなもので30M)を、
開いて→シートのデータを取得して→上書きせずに閉じて、
を繰り返す処理ですが、
実行中に他のアプリケーションを使って作業などしていると
この現象が発生するようです。
(但し、作業の重い軽いに必ずしも関係ない様で、起きない時には狙っても起きません。)
今の所、
参照したいブックをオープンしたところで
何のダイアログも出ずに終了しているのを確認しています。
尚、
ブックのオープン・クローズのメソッドの前後のほか、
あちこちにDoEventを配置してます。
色々探したのですが、関連記事が見つかりませんでした。
何かお知恵を拝借出来れば幸いです。
宜しくお願いします。
0792デフォルトの名無しさん
2016/02/09(火) 17:34:59.79ID:fCLnUzKj表示待機(2度目)で無限ループになります。
(なぜかIEのReadyStateは1のまま、LocationNameはYahoo! JAPANのまま)
原因と根本的な対処法を教えてください。
ちなみに以下の場合はなぜか無限ループしません。
・Vista Excel2007 IE9で実行した場合
・ステップインで実行した場合
・Google表示の前にExcelを最前面にした場合(コメントアウト部分の処理です)
・IEのVisibleをFalseのまま実行した場合
0793デフォルトの名無しさん
2016/02/09(火) 17:41:50.26ID:fCLnUzKj'スリープAPIの宣言
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub main()
'IE起動
Dim ie As Object
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
'Yahoo!表示
ie.Navigate "http://www.yahoo.co.jp/"
'表示待機(1度目)
Do While ie.ReadyState < 4 Or ie.Busy = True
Debug.Print "ReadyState:" & ie.ReadyState & " Busy:" & ie.Busy & " LocationName:" & ie.LocationName
Sleep 50
DoEvents
Loop
Debug.Print "Yahoo!表示完了-------------------------------"
0794デフォルトの名無しさん
2016/02/09(火) 17:43:31.26ID:fCLnUzKj'Excel最前面化
'AppActivate Application.Caption
'Google表示
ie.Navigate "http://www.google.co.jp/"
'表示待機(2度目)
Do While ie.ReadyState < 4 Or ie.Busy = True
Debug.Print "ReadyState:" & ie.ReadyState & " Busy:" & ie.Busy & " LocationName:" & ie.LocationName
Sleep 50
DoEvents
Loop
Debug.Print "Google表示完了-------------------------------"
Set ie = Nothing
End Sub
0795デフォルトの名無しさん
2016/02/09(火) 17:47:55.13ID:yhhWqviCおれは
ie.ReadyState < 4
を
ie.ReadyState <> 4
で書いてるなぁ。
解説サイトのパクりだから細かいことはわからないけど。
0796デフォルトの名無しさん
2016/02/09(火) 18:00:00.99ID:fCLnUzKjありがとうございます。
<>に変えてみてもやはり無限ループになります。
多分IE11なのが悪い気がするが
OSごとにIEのバージョンが決まってるからダウングレードもできない・・・
0797デフォルトの名無しさん
2016/02/09(火) 18:18:24.28ID:C6IPgLvUWin8.1 + IE11 でReadyStateが取得できないのは既知の仕様です
対処方法は俺は知らん
0798デフォルトの名無しさん
2016/02/09(火) 18:26:15.97ID:wyjSQA630799デフォルトの名無しさん
2016/02/09(火) 18:36:42.40ID:j0ZWcdvLファイルをオープンせずにSQLとかでデータを取得してもダメなの?
0800デフォルトの名無しさん
2016/02/09(火) 19:07:19.84ID:FJrhS/CAレスありがとうございます。
そのようなやり方もあるのですか。。
ちょっと勉強してみます。
0801デフォルトの名無しさん
2016/02/09(火) 19:45:15.29ID:EIWW8KSR全てのブックの全てのシートに書き込まれた、ある一つのセル(AL列の一行目)
をクリアにしたい。
セルの場所はおなじですが、複数のブック複数のシートに書かれたデータを
クリア(削除)したいのです。
ExcelVer2010で動くVBAを教えてください。
0802デフォルトの名無しさん
2016/02/09(火) 22:58:04.18ID:LDceDFt4下のコード中の変数 pth に
処理したいファイルが入ってるフォルダのパスを指定して実行すると
フォルダ内の全てのエクセルファイルをひらいて、
その全てのシートでセルAL1の値をクリアしてからファイルを上書き保存する
ただし、自分自身 (このマクロを実行するブック) と同じ名前のファイルは開けないから消せない
Sub test()
Dim pth As String
Dim obj As Object
Dim wb As Workbook
Dim sh As Worksheet
pth = ThisWorkbook.Path & "\test" '処理したいフォルダをここで指定する
With CreateObject("Scripting.FileSystemObject")
If Not .FolderExists(pth) Then Exit Sub
For Each obj In .GetFolder(pth).Files
On Error Resume Next
Set wb = Workbooks.Open(obj)
On Error GoTo 0
If Not wb Is Nothing Then
For Each sh In wb.Worksheets
sh.Range("AL1").Clear '消すセルはここで指定する
Next sh
wb.Close SaveChanges:=True
Set wb = Nothing
End If
Next obj
End With
End Sub
0803デフォルトの名無しさん
2016/02/09(火) 23:54:47.06ID:EIWW8KSRパスはどうかくの?
0804デフォルトの名無しさん
2016/02/10(水) 00:17:10.65ID:UeLxeYgcpth = ThisWorkbook.Path & "\test" '処理したいフォルダをここで指定する
ここを
pth = ThisWorkbook.Path
こうする
0805デフォルトの名無しさん
2016/02/10(水) 00:33:55.52ID:GKs+LxV+0806デフォルトの名無しさん
2016/02/10(水) 00:48:04.83ID:6coiY0M2ぐぐろうとしてもどう検索したらいいのか判らないし
0807デフォルトの名無しさん
2016/02/10(水) 02:43:57.94ID:u/mYzECSありがとうございます
仕様なら諦めるしかないかなぁ
そもそもVBAってIE操作にあんまり適してないんですかね
0808デフォルトの名無しさん
2016/02/10(水) 04:19:50.96ID:Urx/IePR識別子(しきべつし)
VBの資料だからVBAでは使えないものもある
https://msdn.microsoft.com/ja-jp/library/s9cz43ek.aspx
0809デフォルトの名無しさん
2016/02/10(水) 04:50:17.97ID:GKs+LxV+if(条件A && 条件B){
}
と書く条件文ですが、この&& (且つ)に対応する符号は
なんになりますか?
0810デフォルトの名無しさん
2016/02/10(水) 05:02:45.87ID:7rRZYeUj0811デフォルトの名無しさん
2016/02/10(水) 08:30:07.58ID:Urx/IePR実験環境を用意するのが面倒なんで、思い付いたことだけ
参照設定を変えてもいいんなら「Microsoft Internet Controls」でなんとかなるかも
ならないかも
0812デフォルトの名無しさん
2016/02/10(水) 09:05:55.41ID:FkM1RfeEJavaScriptの場合、var kinoko = [];といった具合に配列を用意して、あとは適当
にpushするだけでいい。なのでRedimだのしなくていいし、例えば、
var kinoko = [simeji, matsutake, nameko, kawatani]
といった具合にして、別の配列にそのまんまpushができるので、すごく楽。取り出し
もkinoko[3]でkawataniが取り出せる。初期化ももう一度、例えばループ内でそのま
ま、var kinoko = [];と宣言するだけでいい。
物凄く楽にプログラム内でデータテーブルを使えるので、柔軟性がある。こういった
形で楽にメモリ上で配列を扱えると最高なんだけれどね。
0813デフォルトの名無しさん
2016/02/10(水) 09:19:59.78ID:Bjt40mVKDim kinnko as variant
kinoko = split("simeji, matsutake, nameko, kawatani", ",")
とかになっちまいますね。
0814デフォルトの名無しさん
2016/02/10(水) 09:22:25.54ID:FkM1RfeE2次元配列とかになっても、
var kinoko = [];
var takenoko = [];
takenoko.push("bekky")
takenoko.push("kiyohara")
で最後に、kinoko.push(takenoko)とかでさくっと実現できたりするから、こういう地味
だけれど、楽にプログラミングできる仕組みを用意してほしいなって思うね。
0815デフォルトの名無しさん
2016/02/10(水) 10:30:41.33ID:SL6hIX6J0816デフォルトの名無しさん
2016/02/10(水) 10:54:16.66ID:Urx/IePR気になったんで検索しまくったら、ウィンドウを一時的に隠すとIE11のステータスがリセットされるっぽいことが書いてあった
ie.Visible = False
ie.Navigate "http://ほげほげ"
ie.Visible = True
ってやるとうまくいくらしい?
0817デフォルトの名無しさん
2016/02/10(水) 11:01:59.02ID:jozDLnvPANDが近いけど、短絡評価しないので、同じ動きのものはVBAにはないよ
0818デフォルトの名無しさん
2016/02/10(水) 11:06:13.33ID:6eyh9AMRpushはうらやましいし、実現するにはライブラリ等が必要だけど、配列に配列を突っ込むのはVBAでもできるでしょう。
あと
kinoko = Array("simeji", "matsutake", "nameko", kawatani)
とは書けるけど、それは違うんだろうか。
ところで kawatani って何?
0819デフォルトの名無しさん
2016/02/10(水) 13:12:27.48ID:Lsw16fD/川谷絵音 (髪型がキノコっぽい)
0820デフォルトの名無しさん
2016/02/10(水) 13:39:21.10ID:OnEbfKeK短絡評価の話なら
If 条件A Then If 条件B Then 〜
でいいでしょ
0821デフォルトの名無しさん
2016/02/10(水) 16:31:02.12ID:6eyh9AMRぬるぽ
0822デフォルトの名無しさん
2016/02/10(水) 16:38:25.44ID:zs62Z3CJガッ
0823デフォルトの名無しさん
2016/02/10(水) 16:54:10.35ID:YqpZzmVY毎日使っているマクロで最近エラーが出るようになりました。
コードの一部を下に貼ります。
C=Range・・・(中略)の行で「実行時エラー '6' オーバーフローしました」が出てしまいます。
Dim C As Variant
LastRow = SourceWS.Cells(Rows.Count, "B").End(xlUp).Row
FirstRow = SourceWS.Cells(LastRow, "B").End(xlUp).Row
C = Range(SourceWS.Cells(FirstRow, "A"), SourceWS.Cells(LastRow, "J"))
0824823
2016/02/10(水) 16:58:27.84ID:YqpZzmVY変数のSourceWS、LastRow、FirstRowには正しく格納されていることを確認しています。
ちなみにLastRowは200000ぐらいでした(これは日によって変わります。10万以上であることがほとんど)
0825823
2016/02/10(水) 17:08:28.76ID:YqpZzmVYA列のセルは今までは空欄でした。
つい最近からA列には整数を格納するように変更しました
(GetTickCountで取得した整数です)
恐らくこの変更が影響していると思うのですが原因がわかりません。
どなたかヒントをお願いします。
0826デフォルトの名無しさん
2016/02/10(水) 17:56:27.46ID:6eyh9AMRCells(FirstRow, "A") ってなんかおかしくない?
0827デフォルトの名無しさん
2016/02/10(水) 20:20:29.77ID:YqpZzmVYすみません。どこがおかしいかわかりません。
変数Cに格納する行範囲をB列で判断しているのですが・・・
その行範囲のA列からJ列をバリアント配列Cに格納し、
その後他のブックに貼り付けています。
0828デフォルトの名無しさん
2016/02/10(水) 21:06:36.31ID:QrO94O6C普通に指定している行が多すぎるんじゃない?
Function Test(o As Range) As String()
Const BatchWidth = 100 '一度に処理する行数
Dim S() As String
With o
t = .Row
b = .Rows.Count
l = .Column
r = .Columns.Count
End With
ShiftC = r - l + 1
ReDim S(1 To b - t + 1, 1 To ShiftC)
For i = t To b Step BatchWidth
sc = i + BatchWidth - 1
If b < sc Then bw = b Else bw = sc
x = Range(o.Cells(i, 1), o.Cells(bw, ShiftC))
For pr = i To bw
For pc = 1 To ShiftC
S(pr, pc) = x(pr - i + 1, pc)
Next
Next
Next
Test = S
End Function
こんな感じでVariant型配列よりも容量の小さい配列に分割処理して入れ込んでみるとかで解決しないかな。
0829デフォルトの名無しさん
2016/02/10(水) 21:11:14.10ID:5Sg0dwj90830デフォルトの名無しさん
2016/02/10(水) 22:49:55.78ID:CjFlMRzq要素数2百万くらいどうってことない気がするが、何だろうな。
0831デフォルトの名無しさん
2016/02/10(水) 22:56:58.93ID:W4AkdBgm何ですか2百万て?間違ってる上にセンスない回答ですね。
無能は黙っててください。
0832デフォルトの名無しさん
2016/02/10(水) 23:01:11.33ID:UeLxeYgcじゃあまずアンタが黙らないとね
0833デフォルトの名無しさん
2016/02/10(水) 23:01:33.33ID:CjFlMRzqハア?
FirstRowがいつくかわからんが、LastRowが200000ぐらいでA〜J列なんだろ?違うの?
0834デフォルトの名無しさん
2016/02/10(水) 23:02:19.87ID:W4AkdBgm残念ですが僕は無能ではありません。ハズレ!
0835デフォルトの名無しさん
2016/02/10(水) 23:03:08.82ID:W4AkdBgmおいおまえ数字読めないのか!?
0836823
2016/02/10(水) 23:15:33.87ID:YqpZzmVY今回エラーが発生した時の、行数は約20万、列数はA〜Jの10列なので要素数としては約200万でした。
0837デフォルトの名無しさん
2016/02/10(水) 23:16:03.19ID:UeLxeYgcLastRowが200000ぐらい、FirstRowは不明だが最小で1なので
行数は20万前後とする。
A〜Jで10列、
つまり要素数は20万行 * 10列 で200万件
小学生でも出来る計算だぞ
0838デフォルトの名無しさん
2016/02/10(水) 23:19:33.56ID:CjFlMRzq何を言いたいのかわからんが、自分の環境(イミディエイト)でこう出るんだが?
FirstRow=1 : LastRow = 200000
?Range(Cells(FirstRow, "A"), Cells(LastRow, "J")).Count
2000000
要素数2百万の配列になるんじゃないのか?
0839デフォルトの名無しさん
2016/02/10(水) 23:23:31.90ID:CjFlMRzqはこういう勘違いをしてるのかな?
FirstRow=1 : LastRow = 200000
C = Range(Cells(FirstRow, "A"), Cells(LastRow, "J"))
?typename(C)
Variant()
と
set C = Range(Cells(FirstRow, "A"), Cells(LastRow, "J"))
?typename(C)
Range
の違い。
0840デフォルトの名無しさん
2016/02/10(水) 23:24:31.96ID:W4AkdBgmおいお前要素数200万であってるじゃねーか?
まぎらわしい事言うなよ!
でも200万とオバーフローは金輪際関係ないから!
お前がセンスないのは俺のほうが正しい!
0841デフォルトの名無しさん
2016/02/10(水) 23:25:53.23ID:jMBe0mp+常駐ソフトを全部停止させて動かしてみた?
0842デフォルトの名無しさん
2016/02/10(水) 23:26:10.04ID:QrO94O6C0843デフォルトの名無しさん
2016/02/10(水) 23:26:10.66ID:CjFlMRzq俺は最初から >>830 で
「要素数2百万くらいどうってことない気がする」
と言っているのだがな。
0844デフォルトの名無しさん
2016/02/10(水) 23:27:52.95ID:W4AkdBgmお前は正しいw
0845デフォルトの名無しさん
2016/02/10(水) 23:30:18.01ID:TYDlKOEk■ このスレッドは過去ログ倉庫に格納されています