人気マンガがだれでも無料♪電子コミック読み放題!!

エクセルのマクロの保存先について。
エクセル初心者の者です。
いつも、お世話になっております。
下記のようなページ設定するようなマクロををショートカットやボタンで動かそうとしています。

どのようなコードになるでしょうか?
またそのコードの保存先はどこにするのがスムーズなのでしょうか?
(標準モジュール?)
(別のエクセルマクロ有効ファイルでも使用したい)


ページ設定A4サイズ
余白全て0
ベッダーフッター全て0
右の縁のセル幅極小
改ページプレビュー
セルの枠線非表示

【ページ設定】というボタンやショートカット(alt+shift+Cなど)で動かす。

このショートカットを保存したら他のパソコンや他のエクセルマクロ有効ファイルで使用可能なのでしょうか?

言葉足らずな点は補足します。
何卒よろしくお願いいたします。

A 回答 (2件)

> ページ設定A4サイズ



それらをマクロ記録して保存しておけば、次からはそれを呼び出せるようになります。が、それはその保存したPCでしか通用しません。他のPCでも再現するには、その保存したマクロを他にPCにもコピーしてショートカットキーも登録する必要があります。

また保存先を通常のブックにすると、その設定マクロが使えるのはそれを登録したブックが開いててかつアクティブな時だけです。それだとちっとも便利じゃないので、いつも使いたいマクロはExcelが起動した際に自動で開かれるブック(Personal.xlsb)に保存しておきます。

その解説
https://kokodane.com/macro10.htm
    • good
    • 0
この回答へのお礼

目から鱗でした!
ありがとうございました!!

お礼日時:2018/09/15 12:50

こんにちは。



>このショートカットを保存したら他のパソコンや他のエクセルマクロ有効ファイルで使用可能なのでしょうか?

他のパソコンで使用する時は、マクロファイルが存在しないとマクロを起動しませんから、予めマクロ・ファイルをインストールしてあげる必要がありますが、その場合、アドイン型にしていないと、使い勝手がわるいということです。ふつうのファイルの場合は、他の場所からボタンを押すと、呼び出しが掛かって、ファイルが起動します。アドインやPersonal.xlsb では、予め起動しているのですが、これらのファイルの起動自体は見えません。

アドインにする場合は、ボタンは、着脱が可能ですが、Personal.xlsbは、QAT(クイックアクセスツールバー)のボタンに組み入れるのがよいですが、外すことはできません。

>ショートカット(alt+shift+Cなど)
ショートカットは、Personal.xlsb に登録をするとよいでしょう。
また、右クリックメニューに入れることも可能です。
リボンの中に組み込む場合は、別のツールが必要になります。その割には、アドインと大差がありません。

>右の縁のセル幅極小
この意味がよく分かりませんでしたので、組み入れていません。
仮にできても、かなりややこしいそうな気がします。


'//(Personal.xlsbの)標準モジュール
Sub PrintPageSettings()
If Application.PrintCommunication = False Then
MsgBox "プリンターと通信ができません。", vbExclamation
Exit Sub
End If
With ActiveSheet.PageSetup
  .LeftMargin = 0
  .RightMargin = 0
  .TopMargin = 0
  .BottomMargin = 0
  .HeaderMargin = 0
  .FooterMargin = 0
  .PrintHeadings = False
  .PaperSize = xlPaperA4
  .Zoom = 100
End With
With ActiveWindow
 .DisplayGridlines = True
 .View = xlPageBreakPreview
 .Zoom = 100
End With
End Sub
'//

'ショートカット設定用自動マクロ(上記と同じ場所のほうが良い)
Sub Auto_Open()
With Application
 .OnKey "+%c", "PrintPageSettings"
End With
End Sub

'ショートカット解除用自動マクロ
'Personal.xlsbに入れる場合は、あまり役に立ちません。
Sub Auto_Close()
With Application
.OnKey "+%c", ""
End With
End Sub

'---------------
'Shift +
'Ctrl ^
'Alt %
'---------------
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Qエクセルのユーザー定義関数について

エクセルのユーザー定義関数について教えてください。

ユーザー定義関数なるものがあると知り、関数を作成していました。
結構便利なものが作れそうだと分かり
http://kabu-macro.com/word/ya-yo/user_teigikansuul.html
の消費税計算を参考に、簡単な四則演算の計算式を組んでいました。
ある程度普段使う簡単だけど面倒だった数式を組んだのちに、
vlookup関数の代わりに、indexとmatch関数を良く使っているので、これをちょっと使ってvlookup_2という関数を作ろうとしていたのですが、
ユーザー定義関数には既存のワークシート関数を組み込むことはできないのでしょうか?
また組み込めるとしたら上記のindexとmatch関数をどのように配置したら良いのでしょうか?

Aベストアンサー

こんにちは

ユーザ定義関数は(マクロと同様)VBAという言語で記述しています。
ワークシートで利用する関数も(ほとんどのものは)利用することが可能です。

利用法は、例えばINDEX関数であれば
 WorksheetFunction.Index( ~~~ )
のように、WorksheetFunctionオブジェクトのメソッドとして呼び出せばよいです。
引数の内容はシートの関数とほとんど同じですが、一応、事前に確認なさった方がよろしいかと。
https://docs.microsoft.com/ja-jp/office/vba/api/Excel.WorksheetFunction.Index

なお、VBAから利用できるワークシート関数の一覧が以下にありますので、ご参考までに。
https://msdn.microsoft.com/ja-jp/library/office/ff822194.aspx
https://docs.microsoft.com/ja-jp/office/vba/api/excel.worksheetfunction

Qエクセル2007でできていたVBAを2013でも動作して欲しい(改作をお願いします)

9月3日に次の質問を出して、bonaronさんからVBAをいただいて解決済みと思っていたら、エクセル2007で動作していたものが2013では動きません。特に2画面が左右ではなく、上下に表示されてしまいます。どなたか分かる方、どの部分にどのような記述を入れたら良いか、教えてください。

9月3日に質問した内容
同じブック内の2つのシートで【比較&同時にスクロール】がうまくできません
エクセル2007を使用して、同じブック内の【暦data合体】というシートと現在見ているシートを整列(左右に並べて表示)して、並べて【比較&同時にスクロール】したいと思っています。
 下のとおり動かすと、最初の画面では予定通り、2画面が正しく表示されています。しかし、そこからスクロールすると、なぜか左側のブック1と右側のブック2が2行分ずれて表示されてしまいます。
 最初の画面が出てから、スクロールする前に表示タブの【同時にスクロール】のチェックを外し、またチェックを入れ直すと、思い通りの動きになりますが、そのようなことをしなくても【比較&同時にスクロール】したいです。どなたか、分かる方、よろしくお願いします。

9月3日の内容に対して、bonaronさんが回答してくださったベストアンサー(ただし、2013には画面が左右ではなく上下になってしまう)

Sub ウインドウの分割による編集()
  Dim strBookName As String
  Dim sh As Worksheet
  
  strBookName = ThisWorkbook.Name
  ActiveWindow.NewWindow
  
  Windows(strBookName & ":1").Activate
  Range("A3").Select
  ActiveWindow.FreezePanes = True
  ActiveWindow.Zoom = 100
  Sheets("暦data合体").Select
  Range("A3").Select
  ActiveWindow.FreezePanes = True
  ActiveWindow.Zoom = 100
  
  Windows.CompareSideBySideWith strBookName & ":2"
  Windows(strBookName & ":2").Activate
  Set sh = ActiveSheet
  Range("A3").Select
  ActiveWindow.FreezePanes = True
  ActiveWindow.Zoom = 100
  Sheets("暦data合体").Select
  Range("A3").Select
  ActiveWindow.FreezePanes = True
  ActiveWindow.Zoom = 100
  sh.Select
End Sub

9月3日に次の質問を出して、bonaronさんからVBAをいただいて解決済みと思っていたら、エクセル2007で動作していたものが2013では動きません。特に2画面が左右ではなく、上下に表示されてしまいます。どなたか分かる方、どの部分にどのような記述を入れたら良いか、教えてください。

9月3日に質問した内容
同じブック内の2つのシートで【比較&同時にスクロール】がうまくできません
エクセル2007を使用して、同じブック内の【暦data合体】というシートと現在見ているシートを整列(左右に並...続きを読む

Aベストアンサー

こんばんは。

一応、直しました。

>私がやりたいのは右側ウィンドウ1に、
>別なアクティブシート上
>2つのウインドウ(左右の2つの画面)で【比較&同時にスクロール】したいのです。

この部分をメインにして、右がずっと変わっていくものだとします。
この手のマクロは、深く研究したことがないし、誰も手を付けていない分野なので、通常ありきたりのコードしかないはずです。まして、バグっぽい動きがあります。

'------------------------------------------------
'仕様書
'Excel 2013(SDI用)
'・最初のマクロで、同じブック内の同じシートを、画面(Window)を縦にし二分し、左右半半になり、左側の画面の2行目と3行目の間が固定されます。
' しかし、同じシートの場合は、右側の画面の行の固定はなりません。これは、できないようです。また、同じシートの場合は、しないほうがよいでしょう。マクロでは誤動作が発生します。

'・右側のシートを別のシートに、再び同じマクロで実行すると、シンクロと右側の画面の行の固定が可能になります。

・他のブックを開いているとに画面にならないことがありますので、必ず単独のブックで行ってください。他のブックを開いてシンクロさせることは、まだ深く検証されていません。まったく別のプログラムになるらしいです。

'なお、汎用性を求めるために、Sheets("暦data合体").Selectは、加えていません。
必要に応じて、文頭のシングルクォートを外してください。

それから、もしかしてなのですが、このマクロはワークシートのデータを修正するためのものでしょうか。修正だけのためでしたら、ほぼEXCELが中心になる、大変に強力な専用ツール・WinMerge があります。(日経PC21にも紹介されました)

http://www.geocities.co.jp/SiliconValley-SanJose/8165/winmerge.html#screenshots

'-----------------------------------------------
'Option Explicit
Private shName As String
Sub LRWinsSyncro()
 Dim arSh(1) As Variant
 Dim wnNames(1) As Variant
 Static ignoflg As Boolean
 Dim i As Long
 Dim ret As VbMsgBoxResult
 Const SPLINE As Integer = 3 '画面割の行位置
 If ActiveWorkbook.Name <> ThisWorkbook.Name Then
  MsgBox "現在のバージョンはアドイン型ではないので、" & vbCrLf & _
   "別のブックでは使えません。", vbExclamation
  Exit Sub
 ElseIf Workbooks.Count > 1 Then
  If ignoflg = False Then
   For i = 1 To Workbooks.Count
    If Workbooks(i).Name Like "xls?" Or Workbooks(i).Name Like "Book*#" Then
     ret = MsgBox("他のブックを開いていると誤動作します。無視して続行しますか?", vbYesNo) '一度だけ聞いてくる
     If ret = vbNo Then
      MsgBox "他のブックを終了してください。", vbInformation
     ElseIf ret = vbYes Then
      ignoflg = True
      Exit Sub
     End If
    End If
   Next
  End If
 End If
 With ActiveWorkbook.Windows
  If .Count = 1 Then
   'Worksheets("暦date合体").Select
   shName = ActiveSheet.Name '暦date合体
   .Item(1).NewWindow
   .Arrange , True, True, True
  End If

  If .Count = 2 Then
   If .Item(1).ActiveSheet.Name = shName Then
    wnNames(0) = .Item(1).Caption
    wnNames(1) = .Item(2).Caption
    arSh(0) = .Item(wnNames(0)).ActiveSheet.Name
    arSh(1) = .Item(wnNames(1)).ActiveSheet.Name
   Else
    wnNames(1) = .Item(1).Caption
    wnNames(0) = .Item(2).Caption
    arSh(0) = .Item(wnNames(1)).ActiveSheet.Name
    arSh(1) = .Item(wnNames(0)).ActiveSheet.Name
    If shName = "" Then shName = arSh(1)
   End If
  End If
 End With
 If arSh(0) = arSh(1) Then
  With Windows(wnNames(0))
   .Activate
   .FreezePanes = False
   .ActiveSheet.Range("A1").Select
   .ActiveSheet.Rows(SPLINE).Select
   .FreezePanes = True
   .ActiveSheet.Range("A1").Select
  End With
  Windows.Arrange , True, True, True
  Windows.CompareSideBySideWith wnNames(0)
 Else
  With Windows(wnNames(1))
   .Activate
   .FreezePanes = False
   .ActiveSheet.Range("A1").Select
   .ActiveSheet.Rows(SPLINE).Select
   .FreezePanes = True
  End With
  With Windows
   .Item(wnNames(0)).Activate
   .CompareSideBySideWith wnNames(1)
   Windows.Arrange ArrangeStyle:=xlVertical
  End With
 End If
End Sub

Sub ReleasedWindows()
'Window(窓) を一つにするマクロ(別のマクロとして残した)
Dim Ac As Worksheet
Dim sh As Worksheet
With ActiveWorkbook.Windows
 If .Count = 2 Then '画面を戻す
  .Item(2).Close
  .Item(1).WindowState =xlNormal
  ActiveWindow.FreezePanes = False
 End If
End With
Set Ac = ActiveSheet
For Each sh In Worksheets
ActiveWindow.FreezePanes = False '画面固定も外す
Next
Ac.Activate
End Sub

'//
以上ですが、これは、ワークシート上のボタンやコマンドボタン類に登録が一見できたように思えても、登録したマクロ名がなくなってしまいます。(マクロ自体は残っています)
そこで、右クリックメニューに入れることを考えました。興味がおありでしたら紹介します。
ただ、このマクロの方向性は、アドイン型に移行するのが良いようです。

こんばんは。

一応、直しました。

>私がやりたいのは右側ウィンドウ1に、
>別なアクティブシート上
>2つのウインドウ(左右の2つの画面)で【比較&同時にスクロール】したいのです。

この部分をメインにして、右がずっと変わっていくものだとします。
この手のマクロは、深く研究したことがないし、誰も手を付けていない分野なので、通常ありきたりのコードしかないはずです。まして、バグっぽい動きがあります。

'------------------------------------------------
'仕様書
'Excel 2013(SDI用)
'・最初...続きを読む

Qデータの整理(VBA)

エクセルの同じワークブック内に下記データがあります。
この二つのデータを整理してまとめたいと思っていますがVBA等でどのようにすれば出来るでしょうか?
整理したいデータは2行目からです。
ややこしくてなかなか伝わらないかもしれませんが、都度補足致しますのでよろしくお願い致します。

ワークシート名「JUTYU」
A列、B列、C列、D列、E列、F列、G列、H列、I列、J列、K列、L列、M列、・・・
日付1、*、品名1、*、*、受注数量、*、*、*、コード1、*、品名2、コード2、・・・

ワークシート名「JISSEKI」
A列、B列、C列、D列、E列、F列、G列、H列、・・・
日付2、品名1、*、*、品名2、コード1、*、実績数量、・・・

↓これをワークシート「まとめ」にこのようにまとめたい
    A列、B列、C列、D列、E列、F列、G列、H列、・・・
1行目 【空白】、【空白】、【空白】、【空白】、【空白】、【空白】、年、【空白】・・・、年・・・
2行目 コード1、 コード2、【空白】、 品名1、 品名2、  区分、1月、2月・・・、1月、・・・
3行目 データ、  データ、【空白】、 データ、 データ、  受注、上記年月にあう「日付1」の「受注数量」のデータを入れる。その月の数量がなければ空白・・・・
4行目 【空白】、【空白】、【空白】、【空白】、【空白】、  実績、上記年月にあう「日付2」の「実績数量」のデータを入れる。その月の数量がなければ空白
5行目 【空白】、【空白】、【空白】、【空白】、【空白】、  内示、全部空白・・・
6行目 【空白】、【空白】、【空白】、【空白】、【空白】、  見込み、全部空白・・・
7行目 【空白】、【空白】、【空白】、【空白】、【空白】、  合計、3行目~5行目のSUM・・・
3行目~7行目を一グループとし、8行目以降は同じデータごとに繰り返し

※「データ」は、2行目に合う上記ワークシート情報のデータを持ってくる。
※上記ワークシートで同じデータ同士でまとめたい。
 (品名1、品名2が両ワークシートで全て共通であれば一グループにデータをまとめる。なお、品名1と品名2が共通であれば、おのずとコード1も共通になります。)
※コード1、コード2、品名1、品名2の優先順に昇順でまとめる。
※ただし、当月が2018年9月の場合、
 ワークシート「JUTYU」は2018年8月以前のデータは無視する
 ワークシート「JISSEKI」は2018年9月以降のデータは無視する
※データのまとめは前年の1月~。それ以前のデータは無視する。例えば今が2018年9月であれば、2017年1月~でまとめる。←これは後で変えれるようにしたいです。

エクセルの同じワークブック内に下記データがあります。
この二つのデータを整理してまとめたいと思っていますがVBA等でどのようにすれば出来るでしょうか?
整理したいデータは2行目からです。
ややこしくてなかなか伝わらないかもしれませんが、都度補足致しますのでよろしくお願い致します。

ワークシート名「JUTYU」
A列、B列、C列、D列、E列、F列、G列、H列、I列、J列、K列、L列、M列、・・・
日付1、*、品名1、*、*、受注数量、*、*、*、コード1、*、品名2、コード2、・・・

ワークシー...続きを読む

Aベストアンサー

こちらにアップしました。
https://ideone.com/1njDuF

Q文字のみ抽出

”長谷川731” ”鈴木1192” の様に、文字と数字が合体した文字列で
文字の部分の”長谷川” ”鈴木” を抽出する関数を教えてください。
エクセルのバージョンは2010ですので、入れ子は5個までしか使えません。

Aベストアンサー

=LEFT(A1,MIN(FIND({1,2,3,4,5,6,7,8,9,0},A1&1234567890))-1)

Q至急です。エクセルでの質問です。空白セルを無視してデータがあるセルに対して連番を自動的にふりたい!

至急で申し訳ございません。エクセルに詳しい方助けてください!
空白セルを無視してデータがあるセルに対して連番を自動的にふりたいのですが、下図のようにシートが複数あり各シートにまたがっていて(各シートNo.21~別シートのNo.20までで連番)採番しなければなりません。シートの枚数は20シートぐらいですが増える予定です。
ご教授お願い申し上げます。

Aベストアンサー

No5です。以下のようにしてください。
Public Sub 連番作成2()
Dim ws As Worksheet
Dim i As Long
Dim no As Long
Dim no2 As Long
Dim lrow As Long
Dim maxrow As Long
If MsgBox("連番を作成します", vbOKCancel) <> vbOK Then
Exit Sub
End If
no = 1
no2 = 1
For i = 1 To Worksheets.Count
Set ws = Worksheets(i)
maxrow = ws.Cells(Rows.Count, "A").End(xlUp).Row
For lrow = 2 To maxrow
If ws.Cells(lrow, "A").Value = 21 Then
no = 1
End If
If ws.Cells(lrow, "B").Value <> "" Then
ws.Cells(lrow, "C").Value = no
no = no + 1
End If
Next
maxrow = ws.Cells(Rows.Count, "L").End(xlUp).Row
For lrow = 12 To maxrow
If ws.Cells(lrow, "L").Value = 21 Then
no2 = 1
End If
If ws.Cells(lrow, "M").Value <> "" Then
ws.Cells(lrow, "N").Value = no2
no2 = no2 + 1
End If
Next
Next
MsgBox ("完了")
End Sub

No5です。以下のようにしてください。
Public Sub 連番作成2()
Dim ws As Worksheet
Dim i As Long
Dim no As Long
Dim no2 As Long
Dim lrow As Long
Dim maxrow As Long
If MsgBox("連番を作成します", vbOKCancel) <> vbOK Then
Exit Sub
End If
no = 1
no2 = 1
For i = 1 To Worksheets.Count
Set ws = Worksheets(i)
maxrow = ws.Cells(Rows.Count, "A").End(xlUp).Row
For lrow = 2 To maxrow
If ws.Cells(lrow, ...続きを読む

QWindowsで動くVBAがmacOSで動かない

いつもお世話になっております。
1.件名の通り、下記VBA構文をネットで見つけ、Windowsで試したところ、うまく作動しました。
しかし、macOSだと、マクロは動きますが、画像が白い□に、赤いばってんが表示され、うまく機能していないようです。デバックが出てこないので原因がわからずで。。。
どこに手を加えれば良いか、わからないので、恐縮ですが、VBA全文ご教示くださいますと幸いです。

2.また、同マクロでpngファイルでも作動できるようにしたいのですが、どこか調整すべき点はありますでしょうか。

環境は以下の通りです。
macOS High Sierra ver 10.13.6
Excel for Mac ver16.16.1
不足情報あれば、おしらせください。

よろしくおねがいします。

以下構文↓

' 選択したセルに記載された画像ファイルパス(名)のファイルを読み込み、EXCELに貼り付ける。
'
Sub EggFunc_pasteImage()

' 変数定義
Dim filePath As String
Dim targetCell As Range

' エラーを無視する(画像ファイル読込み失敗時用)
On Error Resume Next

' 選択したセル範囲を順次処理
For Each targetCell In Selection.Cells

' セルを選択
targetCell.Select

' 値があれば
If targetCell.Value <> "" Then

' 画像ファイル名として取得
filePath = targetCell.Value

' 画像読込み
ActiveSheet.Pictures.Insert(filePath).Select

' 画像が大きい場合、画像サイズをセル幅に合わせる
If Selection.Width > targetCell.Width Or Selection.Height > targetCell.Height Then
If Selection.Width / targetCell.Width > Selection.Height / targetCell.Height Then
Selection.Height = Selection.Height * (targetCell.Width / Selection.Width)
Selection.Width = targetCell.Width
Else
Selection.Width = Selection.Width * (targetCell.Height / Selection.Height)
Selection.Height = targetCell.Height
End If
End If

' 表示位置をセル中央に移動
Selection.Top = targetCell.Top + (targetCell.Height - Selection.Height) / 2
Selection.Left = targetCell.Left + (targetCell.Width - Selection.Width) / 2

End If

Next

End Sub

いつもお世話になっております。
1.件名の通り、下記VBA構文をネットで見つけ、Windowsで試したところ、うまく作動しました。
しかし、macOSだと、マクロは動きますが、画像が白い□に、赤いばってんが表示され、うまく機能していないようです。デバックが出てこないので原因がわからずで。。。
どこに手を加えれば良いか、わからないので、恐縮ですが、VBA全文ご教示くださいますと幸いです。

2.また、同マクロでpngファイルでも作動できるようにしたいのですが、どこか調整すべき点はありますでしょうか。
...続きを読む

Aベストアンサー

エラー原因が不明のまま
>' エラーを無視する(画像ファイル読込み失敗時用)
>On Error Resume Next
を使うのはお勧めできません。取り得ず外しておきましょう。

>' 画像ファイル名として取得
>filePath = targetCell.Value
Pathもしているのでしょうが、WindowsとMacOSでは区切り文字が異なります。
これが原因ではないでしょうか。
こちらを参考にしてください。
ファイルパスのフォルダの区切り記号が違う
http://darumaexcel.uijin.com/info/pause.html

Qvbaを用いたプログラムについてアドバイスが欲しい

以下のような動作をするプログラムをvbaで記入したいのですが,どのようにプログラムすればいいでしょうか?

ActiveCellの値が a,b となっている場合(b:何らかの数値),
ある変数にbを代入し,ActiveCellの値を a,c に置き換えたいです.
例えば,ActiveCellの値が ADD A,9 の場合,変数xに9を代入し,ActiveCellの値を ADD A,Im に置き換えるという感じです.(この場合は,a=ADD A b=9 c=Im)

自分の方針としては,次のような感じなのですが,言葉で説明している部分のプログラムがよくわからずに手詰まり状態です.
tmp=split(ActiveCell,",")
tmp(1)が数値だった場合,
x=tmp(1)
ActiveCell.Value=tmp(0)の後ろに",Im"を加える

Aベストアンサー

Split を使ったやり方
'//
Sub strExchange()
 Dim buf, Ar, x
 If ActiveCell.Value <> "" Then
  buf = ActiveCell.Value
  Ar = Split(buf, ",")
  If IsNumeric(Ar(1)) Then '数字ならば
   Ar(1) = "Im"
   ActiveCell.Value = Join(Ar, ",")
  End If
 End If
End Sub

正規表現で行う方法があります。

'//
Sub regExhcange()
 Dim RegEx As Object
 Dim Ms, m
 Dim buf As String: buf = ActiveCell.Value
 Dim abuf As String
 Set RegEx = CreateObject("VBScript.RegExp")
 With RegEx
  .Global = True: .IgnoreCase = False: .MultiLine = True
  .Pattern = "(\w+)\s*(\w+),(\d+)" '\dは数字
  If .Test(buf) Then '確保したかチェック
   abuf = .Replace(buf, "$3")
   ActiveCell.Value = Replace(buf, abuf, "Im", , 1)
  End If
 End With
End Sub

Split を使ったやり方
'//
Sub strExchange()
 Dim buf, Ar, x
 If ActiveCell.Value <> "" Then
  buf = ActiveCell.Value
  Ar = Split(buf, ",")
  If IsNumeric(Ar(1)) Then '数字ならば
   Ar(1) = "Im"
   ActiveCell.Value = Join(Ar, ",")
  End If
 End If
End Sub

正規表現で行う方法があります。

'//
Sub regExhcange()
 Dim RegEx As Object
 Dim Ms, m
 Dim buf As String: buf = ActiveCell.Value
 Dim abuf As String
 Set RegEx = CreateObject("VBScript.RegExp")
 Wi...続きを読む

Q今エクセルマクロを作っていて、いいところまではいってるんですが完成には至らなくて困っています。すでに

今エクセルマクロを作っていて、いいところまではいってるんですが完成には至らなくて困っています。すでにシート1のA1からA40のところまで40番までの人の番号と、B1からB40のところまで名前と、C3からAF40のところまで1日から31日までの出席情報がかかれています。(出席なら◯、欠席なら×、遅刻なら△です)。そしてシート上につくった出席というボタンを押すと何番ですか?とインプットボックスが出てきて例えば1と入力したら番号が1の人の出席数だけがカウントされて、出席数は◯◯ですというメッセージが出てくるようにしたいです。どのようにプログラムを設計したらいいんでしょうか?

Aベストアンサー

こんばんは。

学生さんですか?高校生ぐらいでしょうか?入門編で、このぐらいのマクロの問題ができるのは、クラスで1人か2人で、たぶん経験者です。練習用としては、ワークシートの関数はなるべく使わないようにします。

>いいところまではいってるんですが完成には至らなく
うまくいかないのは、間違えているわけで、それがクリアしないと学校では、50点を貰えるかもしれませんが、仕事や掲示板の回答者では、0点であるということです。私は、何度も悔しい思いをしました。VBAプログラミングは完成して初めてマクロと呼びます。

このレベルでも、ヒントが出ていないと、たぶん出来ないのではないかと思います。
仮のサンプル表の画像を貼り付けましたから、それをみてください。

'//
Sub BUTTON1_Click()
 Dim d As Date
 Dim num As Variant
 Dim i As Long
 Dim j As Long
 Dim cnt As Long
 d = Range("C1").Value  '日付の始まり
 cnt =0
'エラー処理
 If Day(d) <> 1 Then MsgBox "表が正しくありません。", vbExclamation: Exit Sub
 num = Application.InputBox("何番ですか?", "出席番号")
 If num = False Then Exit Sub
 If WorksheetFunction.CountIf(Range("A3:A40"), num) = 0 Then
  MsgBox "出席番号は見つかりません。", vbExclamation: Exit Sub
 End If
'---------実際のコード---------
 For i = 1 To 40
  If Val(num) = Trim(Cells(i + 2, 1).Value) Then
   For j = 1 To Day(DateSerial(Year(d), Month(d) - 1, 0))  '月末まで
    If Cells(i + 2, j + 2).Value Like "○*" Then
     cnt = cnt + 1
    End If
   Next j
   Exit For
  End If
 Next i
 MsgBox Cells(i + 2, 1).Value & "番:" & Cells(i + 2, 2).Value & " さんの出席数は" & vbCrLf & _
  cnt & "日 です。"
End Sub

こんばんは。

学生さんですか?高校生ぐらいでしょうか?入門編で、このぐらいのマクロの問題ができるのは、クラスで1人か2人で、たぶん経験者です。練習用としては、ワークシートの関数はなるべく使わないようにします。

>いいところまではいってるんですが完成には至らなく
うまくいかないのは、間違えているわけで、それがクリアしないと学校では、50点を貰えるかもしれませんが、仕事や掲示板の回答者では、0点であるということです。私は、何度も悔しい思いをしました。VBAプログラミングは完成して初めて...続きを読む

Q【Excel VBA】マクロの処理速度について

はじめまして。

マクロの処理速度について教えて頂きたいです。

現在、ボタンクリックにて実行される2つのマクロを作成しています。

1つ目のマクロで、ボタンクリックされると表1より転記にて表2を作成し、
最後に2つ目のマクロ(サブルーチン)を呼び出しています。

2つ目のマクロ(サブルーチン)では、作成した表2を参照して
更に別の表3を作成しています。

ボタンクリックでは無く直接、
「マクロ→マクロの表示→実行」で実行すると正しく処理されるのですが、
ボタンをクリックで実行すると、表3の作成が途中で止まっている?ようで正しく作成されません。
(表3は3行分作成されて止まりますが、マクロ終了時に表示される終了メッセージは表示されます)

素人の為、重いマクロを作成してしまっているのかもしれないのですが、
このような事象の解決策をご存知でしたらお願いいたします(>_<)

Aベストアンサー

>シートのクリアにつきまして、クリアしていない認識はあったのですが、クリアをしてしまうと書式設定や表の罫線が消えてしまうため盛り込めていませんでした。
>3行目以降クリアの場合でも罫線と書式設定が消えてしまいますが、(書式設定で、部署別増減一覧のみ0は非表示としていました)マクロでクリア処理を行う場合、全クリアではなくブランクを挿入するイメージの記述等はありますでしょうか?

そういうことでしたら、
Set ws = Worksheets("人員増減一覧")
ws.Range("A1:I5000").Value = ""・・・・①


maxv = sh1.Cells(Rows.Count, "A").End(xlUp).Row
'②部署別増減一覧のクリア
If maxv > 2 Then
sh3.Range("A3:O" & maxv).Value = ""
End If

のようになります。
①は人員増減一覧の罫線を消さないクリアですが、最大行が5000行の場合のように、予め行数がわかってる場合です。
②は部署別増減一覧の罫線を消さないクリアですが、実際にデータがある行までをクリアする方法です。

いずれにしろ、このような方法をとると、添付図の赤線で囲んだ箇所ができるのではないでしょうか。
罫線は、データがある行までのほうが良いかと思います。
つまり、赤線で囲んだところは、罫線がない方がよいかと思います。
そのようにする方法は、データを作成完了後に罫線をマクロで引く方法です。
これについては、
https://oshiete.goo.ne.jp/qa/10717384.html
「年度別にカウントする転記マクロについて」で回答します。

>シートのクリアにつきまして、クリアしていない認識はあったのですが、クリアをしてしまうと書式設定や表の罫線が消えてしまうため盛り込めていませんでした。
>3行目以降クリアの場合でも罫線と書式設定が消えてしまいますが、(書式設定で、部署別増減一覧のみ0は非表示としていました)マクロでクリア処理を行う場合、全クリアではなくブランクを挿入するイメージの記述等はありますでしょうか?

そういうことでしたら、
Set ws = Worksheets("人員増減一覧")
ws.Range("A1:I5000").Value = ""・・・・...続きを読む

QExcel2016でテンプレートを開こうとすると メモリまたはディスクの空き容量が不足しているため、

Excel2016でテンプレートを開こうとすると
メモリまたはディスクの空き容量が不足しているため、ドキュメントを開いたり、保存したり出来ません。と表示されます。
しかし空き容量は充分にあります。
どうしたら表示を消せますでしょうか?
ちなみに先日パソコンが重たくなって来ていたので
スタートアップの整理や一時ファイルの削除などいろいろ消してしまったのでそれが何か関わっているのでしょうか?

Aベストアンサー

以前にBUFFAL* の RAMDISKをインストールしたことがありませんか?
RAMDISKを以前にインストールし、OFF にして、起動していなくても、一度起動後OFF にし、再起動でExcelが動作した事例。

フォルダオプションで隠しファイルを表示する設定後、「フォルダの移動」をクリックし、空白で表示されている「現在の場所」を以下の様に設定してみる。
(Windows10の場合)
C:\ユーザ\<ユーザ名>\AppData\Local\Microsoft\Windows\INetCache
または
C:\ユーザ\<ユーザ名>\AppData\Local\Microsoft\Windows\Temporary Internet Files

https://answers.microsoft.com/ja-jp/msoffice/forum/msoffice_excel-mso_win10-mso_o365b/メモリまた/51c8b7c9-bae4-4ef8-9d58-8624f8110a18


人気Q&Aランキング