Excel VBA質問箱 IV

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

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


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

【79539】Re:excelの指定
お礼  kmk2201  - 17/12/12(火) 17:24 -

引用なし
パスワード
   マナさま

ご指摘ありがとうございます。
勉強になりました。


▼マナ さん:
>▼kmk2201 さん
>
>同じ質問をされた方がいて、すでに解決済みです。
>
>ht tp://excelfactory.net/excelboard/excelvba/excel.cgi?mode=all&namber=183964&rev=0
・ツリー全体表示

【79538】Re:【VBA】ランダムな指定範囲のソートに...
お礼  エクセル(自称)中級者  - 17/12/12(火) 12:04 -

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

レス、ありがとうございます。
ヒントだけでも十分で、無事自分の行いたい事が出来ました!

ありがとうございました。
・ツリー全体表示

【79537】Re:【VBA】ランダムな指定範囲のソートに...
発言  BJ  - 17/12/12(火) 9:14 -

引用なし
パスワード
   ヒントだけになるけど。

Rw = Selection.EntireRow.Address(0, 0) '選択したセルの行
Rows(Rw).Select

SrtkeyAd = Rows(Rw).Columns(2).Address(0, 0) '選択したセルの行のB列
'Range(SrtkeyAd).Select
MsgBox "ソートするキーの範囲は、" & SrtkeyAd
・ツリー全体表示

【79536】【VBA】ランダムな指定範囲のソートにつ...
質問  エクセル(自称)中級者  - 17/12/11(月) 23:29 -

引用なし
パスワード
   幾ら調べても分からない為、こちらで質問させて頂きます。

Excel2016です。
シート上にボタンを配置し、クリック1回で並べ替えをしたいと思っています。
困っているのが、並べ替えの指定範囲が毎回違うという事です。
マクロの記録で行うと以下のコードが作成されます。

1 Rows("7:8").Select
2 ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
3 ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("B7:B8"), _
4   SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
5 With ActiveWorkbook.Worksheets("Sheet1").Sort
6   .SetRange Range("A7:Y8")
7   .Header = xlGuess
8   .MatchCase = False
9   .Orientation = xlTopToBottom
10   .SortMethod = xlPinYin
11   .Apply
12 End With

1行目のRowsは毎回変わります。
上記のコードでは「7:8」になっていますが、次は「10:15」だったり、次は「17:30」だったりします。
その為3行目と6行目のRange範囲も変わります。
只、6行目の「A*:Y*」とB列という事だけは固定です。

結果行いたい作業が、
 1.セルを行で選択
 2.ボタンで並べ替え
だけになるのですが、セルを選択した場所の取得が中々上手く出来ません。

良い解決策がお分かりであれば、ご助力ください。
宜しくお願い致します。
・ツリー全体表示

【79535】Re:excelの指定
発言  マナ  - 17/12/11(月) 17:44 -

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

同じ質問をされた方がいて、すでに解決済みです。

ht tp://excelfactory.net/excelboard/excelvba/excel.cgi?mode=all&namber=183964&rev=0
・ツリー全体表示

【79534】excelの指定
質問  kmk2201  - 17/12/11(月) 16:40 -

引用なし
パスワード
   特定のフォルダ(FFF)の場所に「リスト」という名前が付いたexcelAがあります。
フォルダ例)S:\AAA\BBB\CCC\DDD\FFF
excel例)あああリストいいい.xlsx
今、このexcelAと別のexcelBが開いていてexcelBがアクティブになっています。
この場合にaxcelAをアクティブにして閉じるvbaを教えてください。
条件として名前には「リスト」は必ず付くのですが、その前後は毎回変化します。前の言葉は変わらないこともあります。
(例:あああリストいいい.xlsx、あああリストううう.xlsx。。。。。)

よろしくお願いします。
・ツリー全体表示

【79533】Re:新しいファイルを作成したい!
発言  マナ  - 17/11/25(土) 14:33 -

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

面倒なので深く考えていませんが。

1)シート名は日付でないと駄目ですか。
ブック名で区別できるのだから、共通にしたほうがよいです。

2)一番大変な操作は、数式編集でしょうか。

>数式を手動で打ち替えております。

「リンクの編集」という機能があります。

3)手作業がいやなら。
「マクロの記録」を実行し、それを叩き台にするとよいです。
・ツリー全体表示

【79532】Re:新しいファイルを作成したい!
発言  りさ E-MAIL  - 17/11/25(土) 14:13 -

引用なし
パスワード
   ▼マナ さん:
年間通して誰かは出勤してるので記入しない日はないです。。
あと月初めなんですが今月から開始したのでまだなんとも泣

大変というわけではないですが
今後、この作業を継続するとなると自動で出来るに越したことはないと思いましたので質問させてもらいました。。
・ツリー全体表示

【79531】Re:新しいファイルを作成したい!
発言  マナ  - 17/11/25(土) 13:31 -

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

休日明けとか、月初めの場合はどうしているのですか。
手作業はそんなに大変ですか。
・ツリー全体表示

【79530】新しいファイルを作成したい!
発言  りさ E-MAIL  - 17/11/25(土) 13:01 -

引用なし
パスワード
   毎日、日にち毎にデータを打ち込んでいます。
例えば26日.xlsmそのファイルの中に前日比を出すために
=IF(ISBLANK(I4),″″,(I4-´C:\Users\〇〇Desktop\記録\H.29.11\[25日.xlsm]25日´I4))という数式が入っています。セルの範囲はI4からI140です。

現在、新しいファイルを作る場合は既存のファイルをコピーし
ファイル名、シート名、数式を手動で打ち替えております。
vbaで新しいファイルをコピーしファイル名、シート名、数式を変更(日にちを-1日?)方法はありますでしょうか。。

よろしくお願いします。
・ツリー全体表示

【79529】Re:集約データの参照元ブック名を取得し...
発言  γ  - 17/11/25(土) 12:45 -

引用なし
パスワード
   申し訳ありません。私の誤認でした。
シートモジュール記載ということをすっかり失念していました。

じゃあ、タイプミスの
Dim ブック As Worknook
だけですねww

質問者さん、折角質問されたのだから、
きちんと成果をあげてほしいですね。
・ツリー全体表示

【79528】Re:集約データの参照元ブック名を取得し...
発言  マナ  - 17/11/25(土) 12:23 -

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

いつもフォローありがとうございます。

>ワークシートの指定が漏れていて

シートに置かれたボタンと思い込んでいましたので省略しましたが、
ユーザーフォームからだとまずいことになりますね。

最初のインデント等のアドバイスもそうですが、
よっちゃんさんにとって、とても重要なことなので
まだ見てくれているとよいのですが。
・ツリー全体表示

【79527】Re:集約データの参照元ブック名を取得し...
発言  γ  - 17/11/25(土) 11:23 -

引用なし
パスワード
   よくみたら、提示されたコードは完成品というより
考え方を示す参考出品のようでした。
ワークシートの指定が漏れていて、仕様を満たしていなかったですね。
転記先が、開いたブックになってしまっています。
質問者さん、気づいていますか? 修正しておいてください。
・ツリー全体表示

【79526】Re:集約データの参照元ブック名を取得し...
発言  γ  - 17/11/25(土) 8:08 -

引用なし
パスワード
   老婆心ながらひとこと。

> 自分の思っていたものと相違なかった
ということではまだまだですね。
回答からきちんと吸収するようにしたほうがよいと思います。

(1)
きちんとインデントを付けましょう。
コードを書くにあたっての一丁目一番地です。
そういう見にくい書き方は、ご自分にハンディキャップを与えているようなものです。
回答者さんのコードの書き方をよく参考にしてください。
 
(2)
CopyPasteは一行でコンパクトに書けます。
   Sheets("入力用").Range("C73:Q102").Copy
   ThisWorkbook.Activate
   Range("A65536").End(xlUp).Offset(5, 0).Select
   ActiveSheet.Paste
のような Selectを多用する書き方から早く脱出したほうがよいでしょう。

(3)
Set ブック = Workbooks.Open(フォルダ & buf)
のように、変数を効果的に使用した見通しの良いコードの書き方を学んで下さい。
・ツリー全体表示

【79525】Re:集約データの参照元ブック名を取得し...
お礼  よっちゃん  - 17/11/25(土) 0:12 -

引用なし
パスワード
   お忙しい中、ご対応頂きありがとうございました。
自分の思っていたものと相違なかったので、
安心しました。
またの機会によろしくお願いいたします。

遅い時間までありがとうございました。
・ツリー全体表示

【79524】Re:集約データの参照元ブック名を取得し...
発言  マナ  - 17/11/24(金) 23:26 -

引用なし
パスワード
   ▼よっちゃん さん:

ごめんなさい。今日はもう返事できません。

Private Sub CommandButton1_Click()
  Dim ブック As Worknook
  Dim フォルダ As String
  Dim buf As String
  
  '画面更新の停止
  Application.ScreenUpdating = False
  Application.DisplayAlerts = False
  '自動再計算の中止
  Application.Calculation = xlCalculationManual
  
  'シートの削除
  Range("A6:Z65536").Clear
  
  フォルダ = Range("A2").Value & "\"
  
  'データ集約
  buf = Dir(フォルダ & "*.xlsx")
  Do While buf <> ""
    Set ブック = Workbooks.Open(フォルダ & buf)
    Range("A65536").End(xlUp).Offset(1, 0).Value = buf
    ブック.Sheets("入力用").Range("C73:Q102").Copy Range("A65536").End(xlUp).Offset(1, 0)
    ブック.Close SaveChanges:=False
    buf = Dir()
  Loop
  
  Application.ScreenUpdating = True
  Application.DisplayAlerts = True
  Application.Calculation = xlCalculationAutomatic
  
End Sub
・ツリー全体表示

【79523】Re:集約データの参照元ブック名を取得し...
回答  よっちゃん  - 17/11/24(金) 23:10 -

引用なし
パスワード
   早速の返信ありがとうございます。

大変申し訳ありません。
正直、ネット上の情報を元に組み立てたプログラムのため、
深く理解をしておりませんでした。

もしよろしかったら、どのようなプログラムがあるか、
紹介していただけると助かります。

よろしくお願いいたします。
・ツリー全体表示

【79522】Re:集約データの参照元ブック名を取得し...
発言  マナ  - 17/11/24(金) 22:37 -

引用なし
パスワード
   ▼よっちゃん さん:

ブック名はbufであることは理解できていますか?
なので、それを希望のセルに書き込めばよいです。
・ツリー全体表示

【79521】集約データの参照元ブック名を取得しセル...
質問  よっちゃん  - 17/11/24(金) 22:15 -

引用なし
パスワード
   初めまして。
VBA初心者のよっちゃんと申します。
勉強不足で初歩的な質問が多いかもしれませんが、よろしくお願いします。

下記のようなプログラムを作成してデータ集約を行っています。
データ集約自体に下記プログラムで問題はないのですが、
データを集約した元ブックの名称を併せて取得したいと考えています。
ネット上でも探してみたのですが、思うようなプログラム紹介が
ありませんでした。

お忙しいと中申し訳ありませんが、ご教授をよろしくお願いします。


Private Sub CommandButton1_Click()
Dim buf As String, i As Long
Dim j

'画面更新の停止
  Application.ScreenUpdating = False
  Application.DisplayAlerts = False
'自動再計算の中止
  Application.Calculation = xlCalculationManual

'シートの削除
Range("A6:Z65536").Clear

'データ集約
buf = Dir(Sheets("集約").Range("A2").Value & "\*.xlsx")
Do While buf <> ""
Workbooks.Open Worksheets("集約").Range("A2").Value & "\" & buf
Sheets("入力用").Range("C73:Q102").Copy
ThisWorkbook.Activate
Range("A65536").End(xlUp).Offset(5, 0).Select
ActiveSheet.Paste
Workbooks(buf).Activate
Application.CutCopyMode = False
Workbooks(buf).Close SaveChanges:=False
buf = Dir()
Loop

'空白行の削除
Columns("A").SpecialCells(xlCellTypeBlanks).Select
Selection.EntireRow.Delete
Application.CutCopyMode = False

End Sub

・ツリー全体表示

【79520】Re:最終行の変動した連続データー
お礼  トキノハジメ  - 17/11/24(金) 9:25 -

引用なし
パスワード
   ▼マナ さん:
色々アドバイス有難うございました。

いいのが見つかりましたので、勉強します。

今後とも宜しくお願い致します。
・ツリー全体表示

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