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/
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:TYDlKOEk0846823
2016/02/10(水) 23:33:40.88ID:YqpZzmVY>>845
最初に書いてなくてすみません。
エクセル2010でxlsmです。
0847823
2016/02/10(水) 23:36:48.09ID:YqpZzmVY常駐ソフト停止することを試していませんが、
それならば、メモリが不足しています、のエラーになるかと。
オーバーフローというのが解決のヒントかと個人的には思います。
0848デフォルトの名無しさん
2016/02/10(水) 23:36:48.13ID:W4AkdBgm謝るな!荒したのは俺だw
まあ俺は答えは分からんがガンバってくれたまえwww
0849デフォルトの名無しさん
2016/02/10(水) 23:38:29.98ID:YqpZzmVYなんかワロたw
0850デフォルトの名無しさん
2016/02/10(水) 23:43:11.68ID:CjFlMRzq一応聞くけどGetTickCountの値はどの程度?
それとDeclare文の宣言はどうなってますかね?
0851デフォルトの名無しさん
2016/02/10(水) 23:49:20.06ID:jMBe0mp+確かにメモリーが不足していますのエラーってあるよね
でもなんとなく
その行がエラーを出すんじゃなくてそれより前のコードで大量にメモリーを使用したままなんじゃないのかなぁ
だって結局こういうことでしょ
Sub sample()
Dim C As Variant
C = Range("A1:J200000")
End Sub
0852デフォルトの名無しさん
2016/02/10(水) 23:49:30.85ID:YqpZzmVYGetTickCountの値:
→190423431〜217241781
Declare文の宣言はどうなってますかね:
→Declare Function GetTickCount Lib "KERNEL32.DLL" () As Long
0853デフォルトの名無しさん
2016/02/11(木) 00:10:42.37ID:cll589HHLastRowやFirstRowの型、
それとGetTickCountを何かの変数に格納しているならその変数の型、
いずれも十分なサイズなんですよね?
うーむ
0854823
2016/02/11(木) 00:32:34.09ID:GSEE6twL申し訳ありませんが私の知識不足により貴方のレスの意図が理解できていません。
コメント返すまで時間をください・・・
>>853
LastRowやFirstRowの型:
→Dim FirstRow As Long
→Dim LastRow As Long
GetTickCountを何かの変数に格納しているならその変数の型:
→Public Out(1 To 1, 1 To 7) '←標準モジュールにPublicで宣言(variantは明示してませんが)
→Out(1, 1) = GetTickCount 'GetTickCountはVariant変数に直接格納しています
この変数Outを後ほどセルに書き出しています。
0855デフォルトの名無しさん
2016/02/11(木) 00:47:48.35ID:mEBsgK8aたとえばさ、
C = Range(SourceWS.Cells(FirstRow, "A"), SourceWS.Cells(LastRow, "A"))
でもエラーになるの?
エラーが出始めた前後で、
貴方に心当たりがあるのはA列の変化だけなんでしょ?
だったらその値だけを取得してもエラーになるかどうか試してみたら?
0856デフォルトの名無しさん
2016/02/11(木) 03:30:20.36ID:GSEE6twL>>823とは異なるデータ(行数は約19万)でまたもオーバーフローしたので>>855を試してみました。
エラーが出た後、デバッグをクリックし、イミディエイトウィンドウに、
C = Range(SourceWS.Cells(FirstRow, "A"), SourceWS.Cells(LastRow, "A"))
としたところオーバーフローしました。ただ、
C = Range(SourceWS.Cells(FirstRow, "B"), SourceWS.Cells(LastRow, "B"))
↑ではエラーとなりませんでした。
C = Range(SourceWS.Cells(FirstRow, "B"), SourceWS.Cells(LastRow, "J"))
↑これもエラーとなりませんでした。
また、A列のデータを全てクリヤした後マクロを実行すると、
C = Range(SourceWS.Cells(FirstRow, "A"), SourceWS.Cells(LastRow, "J"))
↑最近毎回エラーとなるここでエラーが出ませんでした。
どうやら、A列のデータ次第でエラーが出たり出なかったりしているようです。
でもまだ原因がわかりません。どなたか助けてください。
0857デフォルトの名無しさん
2016/02/11(木) 04:14:34.02ID:b/HRrcI5いろいろテストしたけど
A列の中に かなり大きな値で書式設定(通貨or会計とか)してるセルない?
一度 A列全選択して書式を標準にしたらどうでしょうか?
こちらでテストしたら(Excel2016) データが
=10^15
又は
1000000000000000
で書式が 通貨or会計の時
Dim c As Variant
c = Range("a1")
がオーバーフローになる(書式が標準や数値の時にはならない)
0858デフォルトの名無しさん
2016/02/11(木) 07:23:22.39ID:mEBsgK8aいや、あのさあ、もうちょっと応用を利かそうよ
A列に問題があるって分かったんなら、
次はそのなかでどの行に問題があるかを調べていくんだよ
例えば
Dim i As Long も宣言しといて
For i = FirstRow To LastRow
Debug.Print C = SourceWS.Cells(i, 1)
Next i
なんてやるとかできるじゃん
あるいは1セルずつだと止まらないかもしれないから
その時は
For i = 1 To LastRow - FirstRow + 1
C = SourceWS.Cells(FirstRow, 1).Resize(i)
Next i
でどこまで行数増やしたら止まるのかをしらべるとかさ
そうやって問題点を絞り込んでいけば
仮に原因までは分らなくても回避策は講じられるかもしれないでしょ
0859デフォルトの名無しさん
2016/02/11(木) 09:29:53.37ID:cll589HHあなたの問題を検証しようとしていたら環境がおかしく(?)なってきた。
>>825 で
「A列のセルにGetTickCountで取得した整数を格納した」
と書いてあるので、セル範囲に直接 =GetTickCount() として値を入れてみた。
そうすると以下の2パターンでエクセルが落ちる。
1. 当該範囲を選択後、C = Selection.value としてVariant配列を作成したとき
2. 値を入れた領域の右側のセルに行って ctrl + R でコピーしたとき
まっさらなシートでやってもエクセルを立ち上げ直してもOSを立ち上げ直しても再現する。
これまでこんなことはなかった気がするが、なんだこりゃ?
Office Personal 2010 Excel 14.0.7163.5000(64ビット)
0860デフォルトの名無しさん
2016/02/11(木) 12:57:34.93ID:GSEE6twLいろいろテストして頂きありがとうございました。
>>858の方法で一行ずつVariant変数に格納してみたところ、
上の方の行では問題ありませんでしたが、13万行あたりでエラー。
その行のA列の書式は日付型でした。
正常にVariantに格納できていた行のA列は標準書式でした。
A列の書式を全て標準とすることで当初のマクロは正常に動きました。
なぜこれでエラーが回避できたのかはわかりませんが、とりあえず大きく前進しました。
ありがとうございました。
>>858
858の一行ずつ格納するコードを実行することでA列書式が影響していることがわかりました。
ありがとうございました。
>>859
私の問題で迷惑をかけてしまい申し訳ありません。
私の環境で1,2を試してみましたがエクセルは落ちませんでした。
OFFICE2010 32bit + Win7 64bit
0861823
2016/02/11(木) 12:59:46.57ID:GSEE6twLかつてA列には日付が入っており、その名残というか当時の書式が残ってしまっていたようです。
0862デフォルトの名無しさん
2016/02/11(木) 14:46:45.09ID:2zWchetY> 私の問題で迷惑をかけてしまい申し訳ありません。
いや、そう言うケースでエラーになるのは俺には勉強になったよ
0863デフォルトの名無しさん
2016/02/11(木) 15:44:40.95ID:cll589HH一体なんだったのかわからん。
さて、ドキュメント作成の作業に戻ろう...
0864デフォルトの名無しさん
2016/02/11(木) 23:27:10.13ID:8WhoCP6Oその際に型を選択するんだが、元の値がその型に収まらない場合エラーが出る
今に始まった話じゃないし、対策としてRange.Value2ってのも実装されてる
0865デフォルトの名無しさん
2016/02/11(木) 23:56:26.18ID:zhBGlfG9それぞれのシートのA1,A2,B1,B2,C1,C2と固有のセルデータを所得して、
それを新たなブックに1行ずつデータを順に張り付けたい。
1行が1ブック(シート)分のデータになるようにしたい。
どのようにVBAを書けばいいですか
Excel2010でお願いします。
0866デフォルトの名無しさん
2016/02/12(金) 00:06:05.03ID:4EYM4HYY0867デフォルトの名無しさん
2016/02/12(金) 00:22:05.65ID:NB9uA2aw普通に書けばいいですね
0868デフォルトの名無しさん
2016/02/12(金) 01:59:27.96ID:gunxxlb9他のブックを参照する、特定のセルの値をとる、
1行ずつブックに値を書く、とかね。
0869デフォルトの名無しさん
2016/02/12(金) 06:02:16.01ID:4KxhZPevちなみにいくらぐらい欲しいの?
こんなの報酬もらおうにも100円ぐらいの内容だと思うけど
0870デフォルトの名無しさん
2016/02/12(金) 06:08:37.28ID:Fbay5uRwで、一日かかるかどうかだから二万円くらいじゃね?
0871デフォルトの名無しさん
2016/02/12(金) 07:44:15.34ID:vUMz7FOm■ このスレッドは過去ログ倉庫に格納されています