Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


332 / 3841 ページ ←次へ | 前へ→

【75784】Re:ブックの共有時のハイパーリンク使用
質問  ゆーあ  - 14/7/7(月) 15:39 -

引用なし
パスワード
   独覚 さん

コメントありがとうございます。

>使いたい機能が不明なのでできるかどうかはわからないけど、
>HYPERLINK関数を使うことはできないのかな?
とのことでしたので、
HYPERLINK関数を調べてみましたが、
使い方がまったくわかりませんでした。。。


そのHYPERLINK関数を使えば、
下記コードのセレクトしているセルをハイパーリンクにできますでしょうか。
宜しくお願い致します。

Dim ACR As Long

ACR = ActiveCell.Row
Cells(ACR, 125).Select
  
  ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:= _
  Cells(ACR, 125).Value

Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=Ture
・ツリー全体表示

【75783】Re:大量データの比較:VLOOKUPの高速化
お礼  西瓜糖  - 14/7/7(月) 13:30 -

引用なし
パスワード
   ▼γ さん:

ご教示いただきましたプログラムで、
問題なく短時間で動作するようになりました。
本当に助かりました。どうもありがとうございました。
・ツリー全体表示

【75782】Re:ブックの共有時のハイパーリンク使用
回答  独覚  - 14/7/7(月) 13:06 -

引用なし
パスワード
   使いたい機能が不明なのでできるかどうかはわからないけど、
HYPERLINK関数を使うことはできないのかな?
・ツリー全体表示

【75781】Re:ブックの共有時のハイパーリンク使用
お礼  ゆーあ  - 14/7/7(月) 8:08 -

引用なし
パスワード
   γ さん

コメントありがとうございます。
私もいろいろ調べたのですが、回避できるみたいな記述がありましたので、
少し期待してたのですが、残念です。
お手数お掛けいたしました、ありがとうございました。
・ツリー全体表示

【75780】Re:集計
発言  マルチネス  - 14/7/6(日) 17:17 -

引用なし
パスワード
   回答者への参考として。

ht tp://www.excel.studio-kazu.jp/kw/20140706164905.html
・ツリー全体表示

【75779】集計
質問  とろざえもん  - 14/7/6(日) 16:36 -

引用なし
パスワード
   複数の同じ書式の日報用シートがあり、1番右に集計用のシートがあります。

日報用シートが20までなら正常に集計されるのですが21以上になると空白であるはずの次の行BC・BD・BG・BHに数値が入ってしまいます。

どなたかお知恵を貸して下さい。

Sub 詳細集計()
Dim s As Integer
Dim target_sheet As Worksheet
Dim summary_sheet As Worksheet
Set summary_sheet = ThisWorkbook.Worksheets("集計")
s = 9
For Each target_sheet In ThisWorkbook.Worksheets
summary_sheet.Range("AY" & CStr(s)).Value = target_sheet.Range("B9").Value
summary_sheet.Range("AZ" & CStr(s)).Value = target_sheet.Range("H9").Value
summary_sheet.Range("BA" & CStr(s)).Value = target_sheet.Range("H24").Value
summary_sheet.Range("BB" & CStr(s)).Value = target_sheet.Range("A28").Value
summary_sheet.Range("BC" & CStr(s)).Value = target_sheet.Range("D28").Value
summary_sheet.Range("BD" & CStr(s)).Value = target_sheet.Range("F28").Value
summary_sheet.Range("BE" & CStr(s)).Value = target_sheet.Range("H28").Value
summary_sheet.Range("BF" & CStr(s)).Value = target_sheet.Range("A29").Value
summary_sheet.Range("BG" & CStr(s)).Value = target_sheet.Range("D29").Value
summary_sheet.Range("BH" & CStr(s)).Value = target_sheet.Range("F29").Value
summary_sheet.Range("BI" & CStr(s)).Value = target_sheet.Range("H29").Value
s = s + 1
Next target_sheet
End Sub
・ツリー全体表示

【75778】Re:月毎に抽出して印刷
回答  γ  - 14/7/5(土) 10:58 -

引用なし
パスワード
   Sub test()
  Dim m As String

  m = InputBox("月を入力してください", "月入力", "1月")
  If m = "" Then Exit Sub
  Worksheets("Sheet1").Range("A1") = Val(m)
  Worksheets("Sheet2").PrintOut
End Sub
というようなことなのかな。
・ツリー全体表示

【75777】Re:月毎に抽出して印刷
発言  γ  - 14/7/5(土) 10:45 -

引用なし
パスワード
   >実際のシートでは、
>Sheet1に全データが表示されてあり、
>Sheet2に抽出データが表示されるようになっています。
>
>A1に1から12の数字を入力すると、
>入力した数字の月のデータだけが表示されるようになっています。
ああ、そうなんですか。
それなら、詰まっているところは具体的にどこですか?
・ツリー全体表示

【75776】Re:月毎に抽出して印刷
回答  みき  - 14/7/5(土) 10:23 -

引用なし
パスワード
   実際のシートでは、
Sheet1に全データが表示されてあり、
Sheet2に抽出データが表示されるようになっています。

A1に1から12の数字を入力すると、
入力した数字の月のデータだけが表示されるようになっています。
・ツリー全体表示

【75775】Re:月毎に抽出して印刷
発言  γ  - 14/7/5(土) 9:57 -

引用なし
パスワード
   >A列 日付
はもちろんDate型になっているんですよね。
普通はオートフィルタを使うと思うのですが、
1月だけに絞り込むことは、手作業ではできているんですか?
・ツリー全体表示

【75774】月毎に抽出して印刷
質問  みき  - 14/7/5(土) 9:03 -

引用なし
パスワード
   Sheet1に下記のデータが入力されています。

A列 日付
B列 商品名
C列 単価

印刷ボタンを押すと、
「何月を抽出して印刷しますか?」
というメッセージボックスを表示させ、
「1月」と入力したら、
1月のデータだけを印刷するvbaを作成したいです。

どのように記述すれば良いでしょうか?
・ツリー全体表示

【75773】Re:大量データの比較:VLOOKUPの高速化
発言  γ  - 14/7/5(土) 4:50 -

引用なし
パスワード
   dic前月を作成するところ、
>  '辞書の作成
>  For k = 1 To myRow2
は  For k = 1 To myRow1
の間違いです。
・ツリー全体表示

【75772】Re:大量データの比較:VLOOKUPの高速化
発言  γ  - 14/7/4(金) 23:11 -

引用なし
パスワード
   新規データ判定部分と、修正データ部分は繰り返しをひとつにすることが
できます。それは、そちらでトライしてみてください。
・ツリー全体表示

【75771】Re:大量データの比較:VLOOKUPの高速化
回答  γ  - 14/7/4(金) 22:58 -

引用なし
パスワード
   たたき台。
Sub test()
  Dim lastMonth As Worksheet
  Dim thisMonth As Worksheet
  Dim myRow1 As Long
  Dim myRow2 As Long

  Dim dic前月 As Object
  Dim dic当月 As Object
  Dim v As Variant
  Dim vv As Variant
  Dim k As Long
  Dim kk As Long

  Set dic前月 = CreateObject("Scripting.Dictionary")
  Set dic当月 = CreateObject("Scripting.Dictionary")

  Set lastMonth = Worksheets("前月")
  Set thisMonth = Worksheets("今月")

  myRow1 = lastMonth.Range("A1").CurrentRegion.Rows.Count
  myRow2 = thisMonth.Range("A1").CurrentRegion.Rows.Count

  '辞書の作成
  For k = 1 To myRow2
    dic前月(lastMonth.Cells(k, "L").Value) = k
  Next

  For k = 1 To myRow2
    dic当月(thisMonth.Cells(k, "L").Value) = k
  Next

  ' ---------削除データ
  For k = 1 To myRow1
    v = lastMonth.Cells(k, "L").Value
    If Not dic当月.exists(v) Then
      lastMonth.Cells(k, "M").Value = "削除"
    End If
  Next
  ' ---------新規データ
  For k = 1 To myRow2
    v = thisMonth.Cells(k, "L").Value
    If Not dic前月.exists(v) Then
      thisMonth.Cells(k, "M").Value = "新規"
    End If
  Next
  ' --------- 修正データ
  For k = 1 To myRow2
    v = thisMonth.Cells(k, "L").Value
    If dic前月.exists(v) Then
      kk = dic前月(v)
      vv = lastMonth.Cells(kk, "G").Value
      If vv <> thisMonth.Cells(k, "G").Value Then
        thisMonth.Cells(k, "M").Value = "修正"
      End If
    End If
  Next
End Sub

あとは、配列化によるスピードアップだけれど、
・新規、削除、修正箇所がさほど多くなければ、
 書き込み部分の測度上昇の余地は小さいだろう。
・読み込み部分のセル範囲を纏めて配列で読み込んでから、
 処理する方法もあるけれど、劇的に早くなる気は余りしない。
そこそこのスピードは出るのではないか。
・ツリー全体表示

【75770】Re:ブックの共有時のハイパーリンク使用
回答  γ  - 14/7/4(金) 21:37 -

引用なし
パスワード
   「共有ブックで使用できない機能」
ht tp://office.microsoft.com/ja-jp/excel-help/HP005201080.aspx
によると
ハイパーリンクの挿入または変更(既存のものは除く)は、不可事項になっています。
VBAだからといって、
その制約が解除されるといった事はないと思います。
・ツリー全体表示

【75769】大量データの比較:VLOOKUPの高速化
質問  西瓜糖  - 14/7/4(金) 14:14 -

引用なし
パスワード
   はじめて質問させていただきます。お世話になります。
素人で申し訳ありませんが、どうぞよろしくお願いいたします。

前月と今月のシートを比較し、
新規データと削除データ、修正があったデータを洗い出すのが目的です。
それぞれ、A列からAN列までデータが入っています。M列からP列は空白です。

見よう見まねで以下の通り作成しましたところ、
データの行が100行くらいであれば問題なく動くのですが、
10万行近くなるとフリーズしてしまいます。

高速化のために"Application.Calculation = xlCalculationManual"を追加すると、
計算式が動かなくなってしまいました。

VLOOKUPの代わりにdictionaryオブジェクトを使うべきかとも思いましたが、
使い方がよくわかりません。

ご教示いただけますと幸甚です。
どうぞよろしくお願いいたします。


Sub Data_compare()
Application.ScreenUpdating = False

Dim LastMonth As Worksheet
Dim ThisMonth As Worksheet
Set LastMonth = Worksheets("前月")
Set ThisMonth = Worksheets("今月")

'データ照合

Dim TheRow1 As Long
Dim TheRow2 As Long

'新規データの明示
'今月のシートと前月のシートを比較。
'今月のシートのL列の数値(重複なし)をキーとし、前月のシートを検索。
'データがあれば、今月のシートのM列は空白のままとする。
'データがなければ、今月のシートのM列に「新規」と入力。

ThisMonth.Select
TheRow2 = Range("A1").CurrentRegion.Rows.Count
Range("M2").Formula = "=IF(ISNA(VLOOKUP(L2,前月!$L:$L,1,FALSE)),""新規"","""")"
Range("M2").Copy
Range("M3:M" & TheRow2).Select
ActiveSheet.Paste
Application.CutCopyMode = False

Range("M:M").Copy
Range("M1").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False

LastMonth.Select
 
'後に出てくる「範囲修正」でVLOOKUPを使うが、
'キーがL列で、ピックアップしたい列がG列(左側)のため、
'前月のデータのG列からP列にデータをコピー&ペースト

Columns(7).Copy
Columns(16).PasteSpecial

'削除データの明示
'前月のシートと前月のシートを比較。
'前月のシートのL列の数値(重複なし)をキーとし、今月のシートを検索。
'データがあれば、前月のシートのM列は空白のままとする。
'データがなければ、前月のシートのM列に「削除」と入力。

TheRow1 = Range("A1").CurrentRegion.Rows.Count
Range("M2").Formula = "=IF(ISNA(VLOOKUP(L2,今月!$L:$L,1,FALSE)),""削除"","""")"
Range("M2").Copy
Range("M3:M" & TheRow1).Select
ActiveSheet.Paste
Application.CutCopyMode = False

Range("M:M").Copy
Range("M1").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False

'範囲修正の明示
'今月のシートのG列と前月のシートのP列(G列のデータをコピーしたもの)を比較。
'M列が空白のデータ(今月と前月のシートの両方にデータが存在するもの)を対象とする。
'今月のシートのL列の数値(重複なし)をキーとし、前月のシートを検索。
'G列とP列のデータに相違がなければM列は空白のままとする。
'G列とP列のデータに相違があれば、M列に「範囲修正」と入力。

ThisMonth.Select

For i = 2 To TheRow2
  If Cells(i, 13).Value = "" Then
  Cells(i, 13).Formula = "=If(G" & i & "=VLOOKUP(L" & i & ",前月!$L:$P,5,FALSE),"""",""範囲修正"")"
    Cells(i, 13).Copy
    Cells(i, 13).PasteSpecial Paste:=xlPasteValues

  End If
Next

'--並び替え---------------------------------------
'F列を第1キー、A列を第2キーとして並べ替え

LastMonth.Select
Range("A:AN").Sort _
  Key1:=Range("F1"), Order1:=xlAscending, _
  Key2:=Range("A1"), Order1:=xlAscending, _
  Header:=xlYes, _
  OrderCustom:=1, _
  MatchCase:=False, _
  Orientation:=xlTopToBottom, _
  SortMethod:=xlPinYin

ThisMonth.Select
Range("A:AN").Sort _
  Key1:=Range("F1"), Order1:=xlAscending, _
  Key2:=Range("A1"), Order1:=xlAscending, _
  Header:=xlYes, _
  OrderCustom:=1, _
  MatchCase:=False, _
  Orientation:=xlTopToBottom, _
  SortMethod:=xlPinYin

Application.ScreenUpdating = True

End Sub
・ツリー全体表示

【75768】ブックの共有時のハイパーリンク使用
質問  ゆーあ  - 14/7/4(金) 13:51 -

引用なし
パスワード
   WinXP Excel2000

ブックの共有を行った状態で、
ハイパーリンクの機能を使用可能な状態に出来ますでしょうか?

ハイパーリンク使用時のみ、ブックの共有解除する方法では、
共有している意味が無くなりますので、
解除せず、ハイパーリンク機能を使用できる方法が御座いましたら、
ご教授お願い致します。
・ツリー全体表示

【75767】Re:VBAでハイパーリンク制御
お礼  ゆーあ  - 14/7/4(金) 8:53 -

引用なし
パスワード
  
カリーニン さん
γ さん

大変ありがとうございます。
希望通りの動作が出来ました!
感謝感激です!

引き続きの動作については、
少し自分で試行錯誤してみます!
ありがとうございました!
・ツリー全体表示

【75766】Re:VBAでハイパーリンク制御
発言  カリーニン  - 14/7/3(木) 20:01 -

引用なし
パスワード
   横横。

>修正試みましたが、力及ばずでした。

Sub sample()
  Const myFolder As String = "画像のフォルダ名をここに書く"
  Dim fname
  Dim currentfolder As String

  'current folderを退避
  currentfolder = CurDir

  'folderを画像フォルダに変更
  ChDrive myFolder
  ChDir myFolder

  fname = Application.GetOpenFilename("画像 Files (*.jpg), *.jpg")
  If TypeName(fname) = "Boolean" Then
    'current folderを復旧
    ChDrive currentfolder
    ChDir currentfolder
    Exit Sub
  end if
  
  ActiveCell.Value = fname  '★ ActiveCellに画像のファイル名を書き込む

  'current folderを復旧
  ChDrive currentfolder
  ChDir currentfolder
End Sub

または

Sub sample()
  Const myFolder As String = "画像のフォルダ名をここに書く"
  Dim fname
  Dim currentfolder As String

  'current folderを退避
  currentfolder = CurDir

  'folderを画像フォルダに変更
  ChDrive myFolder
  ChDir myFolder

  fname = Application.GetOpenFilename("画像 Files (*.jpg), *.jpg")
  If TypeName(fname) <> "Boolean" Then    
    ActiveCell.Value = fname  '★ ActiveCellに画像のファイル名を書き込む
  End If
  'current folderを復旧
  ChDrive currentfolder
  ChDir currentfolder
End Sub
・ツリー全体表示

【75765】Re:VBAでハイパーリンク制御
発言  ゆーあ  - 14/7/3(木) 18:36 -

引用なし
パスワード
  
カリーニン さん
γ さん

コメントありがとうございます。
大変助かります。

私としても、マクロ記録をしながら意味を調べたりして
行っておりますが、まだ初心者ですので上手く行きません。


γ さん:
>>  If TypeName(fname) = "Boolean" Then Exit Sub
>のところですが、フォルダを復旧せずに抜けてしまっているので、
>修正してください。

修正試みましたが、力及ばずでした。
・ツリー全体表示

332 / 3841 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free