人に聞けない痔の悩み、これでスッキリ >>

VBAで、下記"=SUM(F2:JY2)"の列のところを変数にしたいのですが、どのようにすれば
良いでしょうか?

Range(Cells(2, lastCol + 1), Cells(lastRow, lastCol + 1)) = "=SUM(F2:JY2)"

行の場合は例えば
"=SUM(F2:JY" & lastRow & ")"
のようにしていますが、列で悩んでいます。


"=SUM(F2:JY2)"
↑JYを変数にしたい。

A 回答 (5件)

こんにちは



>"=SUM(F2:JY" & lastRow & ")"
>のようにしていますが、列で悩んでいます。
行番号の場合はそのままの数値が利用できるけれど、列の場合はAB等に変換しなくてはならないので困っているということでしょうか?

そういう面倒なことは、エクセルにやってもらうのが賢明かと思います。
例として、列番号である285がわかっていて、これから「JY]を導いて「F2:JY2」のセル範囲の文字列を作成したいという場合を想定します。

colNum = 285
addr = Range("F2").Resize(1, colNum - 5).Address(0, 0)
fmula = "=SUM(" & addr & ")"

MsgBox fmula  ' → "=SUM(F2:JY2)"

のような感じで、セル範囲の文字列化が可能です。
Addressプロパティのオプション指定で、絶対参照、相対参照やA1形式、R1C1形式を選択できますので、目的に合わせた形式で得ることができます。


一方、地道に、自前で変換することももちろん可能です。
列番号はAから始まる26進表記になっていますので、285/26、(285 mod 26)を計算して文字A(=Chr(65))からの順序をとれば可能そうです。
例えば、(以下は、少しインチキですが…)

colNum = 285
col = Chr(64 + Int(colNum / 26) ) & Chr(64 + (colNum Mod 26))
fmula = "=SUM(F2:" & col & "2)"
MsgBox fmula  ' → "=SUM(F2:JY2)"

となりますが、わざわざこんな面倒なことをやる必要もないですよね。
(上記は雰囲気を示すだけなので、実際には、桁数を判断して文字列を作成しないと、おかしなことが起こり得ます)

上記のような計算をするまでもなく、エクセルにやってもらえば
 MsgBox Cells(2, colNum).Address(0, 0)
で「JY2]を簡単に求めることができます。
    • good
    • 0
この回答へのお礼

ありがとうございます。
今回ご教授頂きました文字列化は色々使えそうです。
助かりました。

お礼日時:2019/04/19 18:33

要するに、左端列固定で、右端列が可変で数式SUM関数を入れたいということでしたら、これでいいのではないでしょうか?



>"=SUM(F2:JY2)"
>↑JYを変数にしたい。
右端は、必ず、RC[-1]になるわけです。 こういう場合は、R1C1型のほうが便利です。

'//標準モジュール
Sub EnterForumla()
'絶対相対参照
 Dim lastRow As Long
 Dim lastCol As Long

 lastRow = Cells(Rows.Count, 6).End(xlUp).Row
 lastCol = Cells(2, Columns.Count).End(xlToLeft).Column '列2行目基準とする
 Range(Cells(2, lastCol + 1), Cells(lastRow, lastCol + 1)).Formula = "=SUM(RC6:RC[-1])"
End Sub
'---------------------------------
'//両方とも相対参照の場合
Sub EnterForumla2()
'相対参照
 Dim lastRow As Long
 Dim lastCol As Long
 Dim Col As Long
 lastRow = Cells(Rows.Count, 6).End(xlUp).Row
 lastCol = Cells(2, Columns.Count).End(xlToLeft).Column '列は2行目基準とする
 Col = Range("F2", Cells(2, lastCol)).Columns.Count
 Range(Cells(2, lastCol + 1), Cells(lastRow, lastCol + 1)).Formula = "=SUM(RC[-" & Col & "]:RC[-1])"

End Sub
    • good
    • 1
この回答へのお礼

相対参照を失念していました。
ありがとうございます。

お礼日時:2019/04/19 18:31

此方によると、


lastCol
は Boolean値のようですが、
合ってますか?

https://docs.microsoft.com/ja-jp/office/vba/api/ …
    • good
    • 1
この回答へのお礼

ありがとうございます。
lastColは変数として使用しています。

お礼日時:2019/04/19 18:30

No.1です。



投稿後気づきました。
数式の範囲をA列からにしていましたね。

「A2」の部分を「F2」に変更してください。

どうも失礼しました。m(_ _)m
    • good
    • 0
この回答へのお礼

ありがとうございました。
私の頭では思いつかない手法で参考になりました。

お礼日時:2019/04/19 18:28

こんばんは!



一例です。

Dim myAd As String
Dim myCol As String

と変数を二つ増やし
 myAd = Cells(1, lastCol).Address(False, False)
  Select Case Len(myAd)
   Case 2
    myCol = Left(myAd, 1)
   Case 3
    myCol = Left(myAd, 2)
   Case Else
    myCol = Left(myAd, 3)
   End Select
    Range(Cells(2, lastCol + 1), Cells(lastRow, lastCol + 1)) = "=SUM(A2:" & myCol & 2 & ")"

としてみてはどうでしょうか?

※ 一旦、最終列1行目のセル番地(相対参照)をmyAd に格納し
その文字列の長さで判断
2文字の場合は 左1文字
3文字の場合は 左2文字
そうでない場合は 左3文字を変数 myCol(文字列型)にし、
単純にそれをつなぎ合わせているだけです。m(_ _)m
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています

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

QVBAでオブジェクトの名前に変数を用いる

Dim rng As Range, txtbox As Shape

Set rng = Range("A1")
Set txtbox = ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, 1, 1, 100, 30)
text.Name = rng + "d"

この場合最後の行で変数 rng は無視されてテキストボックスの名前は「d」となります。

text.Name = Range("A1") + "d"
とか
text.Name = Cells(1,1) + "d"
とすると
名前は「(A1の内容)d」
となります。

この違いってどういうものなのでしょう。Range型変数を用いて「(A1の内容)d」とすることはできないのでしょうか。


もう1点だけ。
変数の型について
https://www.moug.net/tech/exvba/0150065.html
にあるObject型というのは
あらゆる種類のオブジェクトを格納できる、オブジェクトに関してはVariant的な存在なのでしょうか。

Dim rng As Range, txtbox As Shape

Set rng = Range("A1")
Set txtbox = ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, 1, 1, 100, 30)
text.Name = rng + "d"

この場合最後の行で変数 rng は無視されてテキストボックスの名前は「d」となります。

text.Name = Range("A1") + "d"
とか
text.Name = Cells(1,1) + "d"
とすると
名前は「(A1の内容)d」
となります。

この違いってどういうものなのでしょう。Range型変数を用いて「(A1の内容)d」とすることはできないのでしょう...続きを読む

Aベストアンサー

No2です。

>A2とrngは参照という点で等価な気がしますが、難しい。
一方はオブジェクト、他方はセル位置を示す文字情報ですので、等価ではありません。
「Rangeはオブジェクトである」ということを忘れないでください。


>text.DrawingObject.Formula = "=rng" は動作せず
>text.DrawingObject.Formula = "=" & rng これは動作せず
>text.DrawingObject.Formula = rng ついでにこれも動作せず

いずれも関数式を設定するセンテンスで、右辺は関数式を意味する「文字列」である必要があります。
上記のうち、"=rng"は文字列ではありますが、そのまま "=rng"という意味になるので、関数式として理解されない可能性が高いです。
(エクセルはrngという名前の定義を探しますが、定義が見つからなければエラーになります)
その他は、オブジェクトを文字列であるかのように勘違いをしていると思われる記述になっていて、機械には解釈できない記述になっています。

なさりたいことは、Rangeオブジェクトが有しているセル位置の情報を文字列化した「A2」($A$2)を右辺に設定することではないでしょうか?
ですので、右辺を
 "=" & rng.Address
等とすることで、動作するようになると思います。
(rngオブジェクトが保持しているセル位置属性を明示的に示している)

No2です。

>A2とrngは参照という点で等価な気がしますが、難しい。
一方はオブジェクト、他方はセル位置を示す文字情報ですので、等価ではありません。
「Rangeはオブジェクトである」ということを忘れないでください。


>text.DrawingObject.Formula = "=rng" は動作せず
>text.DrawingObject.Formula = "=" & rng これは動作せず
>text.DrawingObject.Formula = rng ついでにこれも動作せず

いずれも関数式を設定するセンテンスで、右辺は関数式を意味する「文字列」である必要があります。
上記のう...続きを読む

Q大きいポイント順にデータを抽出したい

いつもお世話になっております。

元データのポイントの高い順に抽出先のC列、D列へデータを抽出したいです。
VLOOKUPとLARGE関数を使用したのですがうまくいきません。

何卒、ご教授願います。

★元データ

A列:支店コード
B列:支店名 
C列:ポイント

A列 B列   C列
1  ①支店  5
6  ②支店  6
5  ④支店  10

★抽出先

A列:作業列(元データの支店コード)
B列:順位(1位~30位まで)
C列:支店
D列:ポイント

A列 B列 C列  D列
1  1  ④支店 10
2  2  ②支店 6
3  3  ①支店 5

Aベストアンサー

No.5です。

重複データがあり、その合計で降順に表示したい!というコトですね。

一つの数式で出来るかどうか判りませんが、
↓の画像のように作業用の列を2列設けるのが一番簡単だと思います。

作業列1のE2セルに
=IF(COUNTIF(B$2:B2,B2)=1,SUMIF(B:B,B2,C:C),"")

作業列2のF2セルに
=IF(E2="","",COUNTIF(E:E,">"&E2)+COUNTIF(E$2:E2,E2))

という数式を入れ下へずぃ~~~!っとフィル&コピーしておきます。

Sheet2のB2セルに
=IFERROR(INDEX(Sheet1!B:B,MATCH(ROW(A1),Sheet1!$F:$F,0)),"")

C2セルに
=IF(B2="","",SUMIF(Sheet1!B:B,B2,Sheet1!C:C))

という数式を入れフィルハンドルで下へコピー!

これで画像のような感じになります。

※ Sheet2のC2セルは色々やり方があると思います。
例えば
=IFERROR(INDEX(Sheet1!E:E,MATCH(B2,Sheet1!B:B,0)),"")

でも大丈夫だと思います。m(_ _)m

No.5です。

重複データがあり、その合計で降順に表示したい!というコトですね。

一つの数式で出来るかどうか判りませんが、
↓の画像のように作業用の列を2列設けるのが一番簡単だと思います。

作業列1のE2セルに
=IF(COUNTIF(B$2:B2,B2)=1,SUMIF(B:B,B2,C:C),"")

作業列2のF2セルに
=IF(E2="","",COUNTIF(E:E,">"&E2)+COUNTIF(E$2:E2,E2))

という数式を入れ下へずぃ~~~!っとフィル&コピーしておきます。

Sheet2のB2セルに
=IFERROR(INDEX(Sheet1!B:B,MATCH(ROW(A1),Sheet1!$F:$F,0)),"")

C2セルに
=I...続きを読む

QExcel VBA マクロ 複数範囲を並び替えたい

Excel 2016を使用しています。
現在、利用予定表を作成しております。
下記のような表(画像参照)があり地域毎に並び替えを一気にしたいのですが可能でしょうか。

カレンダー形式にしており
A列,D列,G列…(3行毎) に通し番号
B列,E列,H列…(3行毎) に名前
C列,F列,I列…(3行毎)  に地域

これが31日分カレンダー形式で作っています。

通し番号はそのままで
日付のグループ?ごとに
地域順に並び替えをしたいのですがマクロで可能でしょうか。
その地域がまとまってくれればいいのでフリガナ等は考慮しなくて大丈夫です。

B5:C9の範囲ひとつでならマクロで並び替えできたのですが
どうしても複数となるとわからなくなってしまいました。

乱文で申し訳ありませんがよろしくおねがいいたします。

Aベストアンサー

こんにちは!

横からお邪魔します。
お示しの画像の配置で列方向には7日分、行方向には1か月の最終日まであるとしての一例です。
尚、①~⑤に関しては並び替えはしなくてよいのですよね。
一例です。

Sub Sample1()
 Dim i As Long, j As Long
 Dim myRng As Range
  For i = 5 To Cells(Rows.Count, "B").End(xlUp).Row Step 7 '//←B列5行目~B列最終行まで7行おき★//
   For j = 2 To Cells(i, Columns.Count).End(xlToLeft).Column Step 3 '//←B列~最終列まで3列おき★//
    If Cells(i, j) <> "" Then
     Set myRng = Cells(i, j).Resize(5, 2)
      myRng.Sort key1:=myRng(2), order1:=xlAscending, Header:=xlNo
    End If
   Next j
  Next i
   MsgBox "完了"
End Sub

※ 都道府県?の昇順で並び替えを行っていますので、
お示しの画像だと「福岡」が最後の方にかまとまってしまいます。

コード内の
>xlAscending

>xlDescending
にすれば降順になりますので、福岡が上の方にまとまりますね。

昇順・降順は好みで変更してみてください。m(_ _)m

こんにちは!

横からお邪魔します。
お示しの画像の配置で列方向には7日分、行方向には1か月の最終日まであるとしての一例です。
尚、①~⑤に関しては並び替えはしなくてよいのですよね。
一例です。

Sub Sample1()
 Dim i As Long, j As Long
 Dim myRng As Range
  For i = 5 To Cells(Rows.Count, "B").End(xlUp).Row Step 7 '//←B列5行目~B列最終行まで7行おき★//
   For j = 2 To Cells(i, Columns.Count).End(xlToLeft).Column Step 3 '//←B列~最終列まで3列おき★//
    If Cells(i, j) <> "...続きを読む

QCSVで文字化けしてしまうのを直すマクロ

いつもお世話になっております。
Excel2013を使用していますので
アドバイスどうぞよろしくお願いします。

"ファイル名"というシートのA列2行目からCSVファイルのファイル名が書いてあります。
日によるのですが、だいたい5~10件程度です。
そしてこのCSVファイルがくせ者でファイルを開くと文字化けを起こしてしまいます。下記のサイトを参考にマクロを作ったのですが、文字化けはしないものの文字に必ず""がついてしまい、また一行しか転記されません。

http://officetanaka.net/excel/vba/file/file10.htm

例 空白→""、 神奈川→"神奈川"

やりたいこととしてはファイル名とあるシートのA列2行目に書いてあるCSVファイルを開き、文字化けを直してSheet1にデータを表示させ、それをファイル名が書いてある最終行まで行いたいです。

Sub macro()
Dim i1 As Long, x As Long
Rbook As Workbook
Rsheet As Worksheet, Ssheet As Worksheet
Set Rbook = ThisWorkbook

Sheets("ファイル名").Select
Set Rsheet = Rbook.Worksheets("ファイル名")
For i1 = 2 To 10
If Rsheet.Cells(i1, 1).Value <> "" Then
Sheets("SHEET1").Select ’表示させるシート
Set Ssheet = Rbook.Worksheets("SHEET1")
Ssheet.Cells.Clear
Ssheet.Range("A1").Select

’文字化けを直す
Dim buf As String, Target As String, i1 As Long
Dim tmp As Variant, j As Long
Target = "¥アドレス" & Ssheet.Cells(i, 1).Value
With CreateObject("ADODB.Stream")
.Charset = "UTF-8"
.Open
.LoadFromFile Target
Do Until .EOS
buf = .ReadText(-2)
i = i + 1
tmp = Split(buf, ",")
For j = 0 To UBound(tmp)
Cells(i, j + 1) = tmp(j)
Next j
Loop
.Close
End With

’別のマクロ実行

End if
Next i1

’2行目、3行目と続く

End Sub

どうぞよろしくお願い致します。

いつもお世話になっております。
Excel2013を使用していますので
アドバイスどうぞよろしくお願いします。

"ファイル名"というシートのA列2行目からCSVファイルのファイル名が書いてあります。
日によるのですが、だいたい5~10件程度です。
そしてこのCSVファイルがくせ者でファイルを開くと文字化けを起こしてしまいます。下記のサイトを参考にマクロを作ったのですが、文字化けはしないものの文字に必ず""がついてしまい、また一行しか転記されません。

http://officetanaka.net/excel/vba/file/fil...続きを読む

Aベストアンサー

こんにちは。

>そのあと"buf = .ReadText(-2)"で止まり
>"パラメーターが間違っています"と表示されてしまいます。。。
>アドバイスどうぞよろしくお願いします。

ご指摘の部分は、残念ですが、想定外の問題で、ADODBを使って別のやり方はありますが、そのデータ自体の問題であり、原因は分からないままにコードを変えて何度も繰り返す可能性のほうが高いです。別のファイルでも、2番めに同じように起こりますか?

   Next j
  Loop
  .Close
 End With
 Set Strm = Nothing '←は入れたらどうでしょうか。
End Sub '←ここが最後の行

それと、私は、参照設定で、Adodb を入れていること。(Microsoft ActiveX Data Objects 2.8 Library)
Dim Strm As ADODB.Stream

これらは、あまり関係ないけれども、実際に自分がする時はこうします。もちろん、ご質問者さんが選んだ方法を完動するように書き上げただけですから、この延長上に、同様のエラーがなくなるという可能性は低いのではないかと思います。

今、思いついたのは、Excel 関数のClean 関数を間に入れる方法はあるとは思います。
それは、エラーを起こすと予想されるバイナリコードを除去する働きがあります。ただし、エラーがバイナリコードであれば、という条件です。

しかし、こちら側では、根本的な解決策は見当たりません。が、何度もトライするよりも、ダメだったファイルが、どうしてだめだったか、エディターなどで調べていただいたほうが良いですね。そちらのほうが早いのです。
巨大なファイルではない限りは、文字変換で、UTF-8 から、SJISに変換するツールで、一旦変更してから、インポートするほうが楽だと思います。Vector で、Unix系のツールなどいくつかあるようです。

こんにちは。

>そのあと"buf = .ReadText(-2)"で止まり
>"パラメーターが間違っています"と表示されてしまいます。。。
>アドバイスどうぞよろしくお願いします。

ご指摘の部分は、残念ですが、想定外の問題で、ADODBを使って別のやり方はありますが、そのデータ自体の問題であり、原因は分からないままにコードを変えて何度も繰り返す可能性のほうが高いです。別のファイルでも、2番めに同じように起こりますか?

   Next j
  Loop
  .Close
 End With
 Set Strm = Nothing '←は入れたらどうでし...続きを読む

QエクセルVBAについて教えてください! 右クリックで表示されるメニューにマクロの実行を登録したいので

エクセルVBAについて教えてください!

右クリックで表示されるメニューにマクロの実行を登録したいのですが、表示されるのは特定のブックを、開いた時のみ表示され、そのブックを閉じると表示されないようにしたいのですが、どのようなコードを、入れたら良いでしょうか?
また、そのコードを入力するモジュールはthis work bookに入力になりますか?標準モジュールに入れて出来る方法があればそちらも教えて下さい。
わかりにくい説明ですが、よろしくお願いします!!!

Aベストアンサー

すでに、No.1さんのご紹介がありますが、Office Tanaka の田中さんのコードは関心ししませんね。起動する前に、Reset や Delete を入れるという建前が必要です。

'//標準モジュール
Sub Auto_Open
   Call RightClickMenuAccess '直接中身を書いても良い。
End Sub

Sub RightClickMenuAccess()
'Dim i As Integer
'右クリックメニュー登録
With Application.CommandBars("CELL")
  .Reset '一旦元に戻す
  With .Controls.Add _
   (Type:=msoControlButton, Before:=1, Temporary:=True) '<=恒久的に残らない-temporary
   .BeginGroup = False
   .Caption = "マクロ名"
   .OnAction = "xxxxxxx" '実際のマクロ名
  End With
End With
End Sub

Private Sub xxxxxxx() 'Private にすると、右クリックのみの呼び出しになります。
'実際の作業マクロ

End Sub

Sub Auto_Close()
  Application.CommandBars("CELL").Reset '一旦元に戻す
End Sub
'-------------------------------
>thisworkbookに入力になりますか?標準モジュールに入れて出来る方法があればそちらも教えて下さい。

ThisWorkbook_Open()/ThisWorkbook_Close() でも同じです。

ThisWorkbook_Openだとしても、  Call RightClickMenuAccess '標準モジュールのマクロを呼び出し1行でよいのです。

ところで、こういうスタイルは、旧設定のようなのです。
https://www.rondebruin.nl/win/s6/win001.htm

新しい設定の仕方(2010以上)は、Bruin氏のように、XML にコードを入れる方法が好まれるようです。
https://www.rondebruin.nl/win/s2/win014.htm

ただ、この方のXMLコードは日本語(2 byte文字)を埋め込むようには出来ていませんので

<?xml version="1.0" encoding="UTF-8"?> // 一行を加えて対応させる
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<contextMenus>

サンプルは Downloads にあります。(2010-2016)

なお、長い間手付かずのUI XMLエディタがMicrosoft から更新されました。Custom UI Editor for Microsft Office Version 4.0.64(メニュー非日本語、2 byte文字対応)、またOffice 右クリックメニュー登録アプリもありますが、日本語(2 byte文字)に完全対応していない模様です。ちょっとむつかしそうですが、やってみると病みつきなるかもしれません。

すでに、No.1さんのご紹介がありますが、Office Tanaka の田中さんのコードは関心ししませんね。起動する前に、Reset や Delete を入れるという建前が必要です。

'//標準モジュール
Sub Auto_Open
   Call RightClickMenuAccess '直接中身を書いても良い。
End Sub

Sub RightClickMenuAccess()
'Dim i As Integer
'右クリックメニュー登録
With Application.CommandBars("CELL")
  .Reset '一旦元に戻す
  With .Controls.Add _
   (Type:=msoControlButton, Before:=1, Temporary:=True) '<=恒久的に残...続きを読む

Qエクセル リストと完全一致するセルに色をつける

シート1のA列とB列に
aaa ccc
bbb ggg
ccc kkk
ddd ooo
と言うリストがあって、A1〜A4はAチーム、B1〜B4まではBチームと名前を付けています
シート2にAチームのリスト4個が続いているものがあればセルを赤、Bチームのリスト4個が続いているものがあればセルを黄色に塗りたいです
AチームとBチームの中には同じ品番がある時もあります
条件付き書式で設定は出来るでしょうか?

Aベストアンサー

(´・ω・`)
”○” の数を数えるんじゃないんだよなあ。

・・・本題・・・

条件付き書式ですよね。

シート2のリストの並び順は
 aaa
 ccc
 bbb
 ddd
では「Aチーム」と認識しないという事でよろしいでしょうか?
ならば、とても簡単です。

シート2の一覧において、

 判定するセル1
 判定するセル2
 判定するセル3
 色を付けるセル
 判定するセル4
 判定するセル5
 判定するセル6

という範囲について調べれば良いという事。

 判定するセル1
 判定するセル2
 判定するセル3
 色を付けるセル

 判定するセル2
 判定するセル3
 色を付けるセル
 判定するセル4

 判定するセル3
 色を付けるセル
 判定するセル4
 判定するセル5

 色を付けるセル
 判定するセル4
 判定するセル5
 判定するセル6

の4パターンについてそれぞれ調べれば良いだけ。

自分なら
 aaa-bbb-ccc-ddd
のようにシート1から文字列を作り、それが調べるセルで同じパターンになるかを調べます。
シート1はA5セルから、シート2はA11セルからデータが入力されているなら、

 シート1!A5 & シート1!A6 & シート1!A7 & シート1!A8 = A11 & A12 & A13 & A14
 シート1!A5 & シート1!A6 & シート1!A7 & シート1!A8 = A12 & A13 & A14 & A15
 シート1!A5 & シート1!A6 & シート1!A7 & シート1!A8 = A13 & A14 & A15 & A16
 シート1!A5 & シート1!A6 & シート1!A7 & シート1!A8 = A14 & A15 & A16 & A17

という条件になる。
この4つのうちの一つでも条件を満たせばセルに赤色を付ければいい。
「Bチーム」についても同様にすればいいので、
この場合、8つの条件式を設定することになります。

面倒でもこの考え方ができていないと、ちょっと条件が変わっただけで対処できずに終わります。
冒頭で「並び順」について書きましたが、並び順がシート1のリストの通りでなくとも色を付けたい場合でも、この考え方は必要ということです。

・・・
ちなみに厄介なのが、どちらのチームにも「ccc」がいるというところかな。
これが無ければ違う方法でシンプルにできるんですけどねえ。

(´・ω・`)
”○” の数を数えるんじゃないんだよなあ。

・・・本題・・・

条件付き書式ですよね。

シート2のリストの並び順は
 aaa
 ccc
 bbb
 ddd
では「Aチーム」と認識しないという事でよろしいでしょうか?
ならば、とても簡単です。

シート2の一覧において、

 判定するセル1
 判定するセル2
 判定するセル3
 色を付けるセル
 判定するセル4
 判定するセル5
 判定するセル6

という範囲について調べれば良いという事。

 判定するセル1
 判定するセル2
 判定するセル3
 色を付け...続きを読む

Q保存先フォルダとファイル名について

いつもお世話になっております。
保存をかける際にダイアログボックスを出したく、
またシートA1には保存先、B1にはファイル名を指定しておきたいのですが
どのようにすればよろしいでしょうか?
色々調べたのですが解決できず、アドレスどうぞよろしくお願いします。

ちなみにEXCEL2013を使用しています。

Sub CsvExportWithQuotation()
 Dim FileName As Variant
 Dim Rng As Range
 Dim LastCell As Range
 Dim c As Range
 Dim i As Long
 Dim strLine As String, fname As String, fpath As String

fpath = cells(1,1).value
fname = cells(1,2).value
 FileName = Application.GetSaveAsFilename( fpath & "¥" & fname,fileFilter:="CSVt Files (*.csv), *.csv")

保存先は指定出来るのですが、ファイル名が表示されません。
何卒よろしくお願い致します。

いつもお世話になっております。
保存をかける際にダイアログボックスを出したく、
またシートA1には保存先、B1にはファイル名を指定しておきたいのですが
どのようにすればよろしいでしょうか?
色々調べたのですが解決できず、アドレスどうぞよろしくお願いします。

ちなみにEXCEL2013を使用しています。

Sub CsvExportWithQuotation()
 Dim FileName As Variant
 Dim Rng As Range
 Dim LastCell As Range
 Dim c As Range
 Dim i As Long
 Dim strLine As String, fname As String, fp...続きを読む

Aベストアンサー

No1です。

>セルではなく直接書いてみたのですが
>ファイル名はFALSE.csv と表示がされました。
ご提示の通りの式を与えれば、そうなります。

第一引数をファイル名と解釈して評価しようとしますので、
> InitialFilename = "保存先&ファイル名"
 1)まず式をそのまま評価すると False(論理値)となり
 2)要求されているのは文字列なので、変換した"FALSE"を値として採用
 3)拡張子「.csv」が付け加えられて
 4)ダイアログのファイル名欄に「FALSE.csv」と表示
という処理がなされているものと思います。

>セルに関数も入っていないのに謎です
セルの値を参照していないのであれば、セルの状態がどうであるかは関係ないはずです。
(関係したら、その方がおかしい)

Qエクセルの入力について

こんなことは、できるのでしょうか

□、■、×を入力するセルがあるのですが、リストなどではなく、シングルクリックをすることにより文字を入力することって、出来るのでしょうか

A1のセルに、クリックするたびに□、■、×の文字を変えて入力したいのです。。

Aベストアンサー

こんばんは!

>シングルクリックをすることにより・・・

単にセル選択だけだと間違ったセルを選択した場合も同じ動作になりますので、
ダブルクリックでの操作にしてみました。

とりあえずA列すべてを対象としています。
↓のコードをシートモジュールにしてください。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 If Intersect(Target, Range("A:A")) Is Nothing Then Exit Sub
  Cancel = True
   With Target
    If .Value = "" Or .Value = "×" Then
     .Value = "□"
    ElseIf .Value = "□" Then
     .Value = "■"
    ElseIf .Value = "■" Then
     .Value = "×"
    End If
   End With
End Sub

こんな感じではどうでしょうか?m(_ _)m

こんばんは!

>シングルクリックをすることにより・・・

単にセル選択だけだと間違ったセルを選択した場合も同じ動作になりますので、
ダブルクリックでの操作にしてみました。

とりあえずA列すべてを対象としています。
↓のコードをシートモジュールにしてください。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 If Intersect(Target, Range("A:A")) Is Nothing Then Exit Sub
  Cancel = True
   With Target
    If .Value = "" Or .Value = "×" Then...続きを読む

QVBAエクセル 指定ホルダーに保存されない

ネットで調べて、以下のVBAを書きました。
特定のホルダーを選択して、そこにセーブするものです。
これにより、成功するものと、うまくいかないものがあります。
つまり、ホルダーの下に保存ができない場合が多いです。
なぜでしょうか?
よろしくお願いいたします。

Sub save()
'ブックの保存
Application.DisplayAlerts = False

With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "*** フォルダを選択し、[OK]をクリック ***"
If .Show = True Then
folder = .SelectedItems(1)
Else
Exit Sub
End If
End With

ActiveWorkbook.SaveAs Filename:=Format(Date, "yyyy") _
, FileFormat:=xlOpenXMLWorkbook

ActiveWindow.Close

Application.DisplayAlerts = True

End Sub

ネットで調べて、以下のVBAを書きました。
特定のホルダーを選択して、そこにセーブするものです。
これにより、成功するものと、うまくいかないものがあります。
つまり、ホルダーの下に保存ができない場合が多いです。
なぜでしょうか?
よろしくお願いいたします。

Sub save()
'ブックの保存
Application.DisplayAlerts = False

With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "*** フォルダを選択し、[OK]をクリック ***"
If .Show = True...続きを読む

Aベストアンサー

Sub SavingFiles()  'プロパティやメソッド名はプロシージャ名には使いません。
 'ブックの保存
 Dim mFolder As String
 Application.DisplayAlerts = False 'これが必要かわかりません。
 
 If ActiveWorkbook.Name = ThisWorkbook.Name Then
  MsgBox "マクロを搭載した本ブックは、保存対象にはなりません。", vbCritical
 End If
'自ブックを保存対象に入れるなら、FileFormt の部分を、xlOpenXMLWorkbookMacroEnabled にする。

 With Application.FileDialog(msoFileDialogFolderPicker)
  .Title = "*** フォルダを選択し、[OK]をクリック ***"
  If .Show = True Then
   mFolder = .SelectedItems(1) & "\" '保存に失敗する理由は、\ が抜けているからか?
  Else
   Exit Sub
  End If
 End With

 ActiveWorkbook.SaveAs Filename:=mFolder & Format(Date, "yyyy") _
  , FileFormat:=xlOpenXMLWorkbook 'mFolderの項目を入れます。

 ActiveWorkbook.Close False 'ActiveWindowでは意味が違います。Falseは、保存後の数値の変化を許さないから。
 Application.DisplayAlerts = True
End Sub

Sub SavingFiles()  'プロパティやメソッド名はプロシージャ名には使いません。
 'ブックの保存
 Dim mFolder As String
 Application.DisplayAlerts = False 'これが必要かわかりません。
 
 If ActiveWorkbook.Name = ThisWorkbook.Name Then
  MsgBox "マクロを搭載した本ブックは、保存対象にはなりません。", vbCritical
 End If
'自ブックを保存対象に入れるなら、FileFormt の部分を、xlOpenXMLWorkbookMacroEnabled にする。

 With Application.FileDialog(msoFileDialogFolderPicker)
...続きを読む

Q[Excel,VBA,VBE] VBE上で構文,定型文の貼り付けを完結させたい

お世話になります。

VBEの右クリックに「よく使う構文の貼り付け」を追加したいと考えています。

例:右クリックメニューから"for文"→"終端セルまで"で以下の文を張り付ける
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
for i = 2 to Cells(Rows.Count, 1).End(xlUp).Select

next i
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

"選択範囲のコメントアウト"を追加したり、Excel側の右クリックにマクロを登録する等の方法は検索したら出てきたのですが、表題の件は見つけられませんでした。

現状、直接記入するかメモ帳から貼り付けていますが少し不便を感じています
ご存知の方がいらしたら、ぜひ教えて頂きたいですm_m

補足質問(こちらは回答不要です)
VBEのショートカットに"選択の開始"は登録出来ないでしょうか
Shiftキーとの併用で任意の範囲選択が出来ることは存じていますが、Shiftキー押しっぱなしでは運指が辛い時があります

お世話になります。

VBEの右クリックに「よく使う構文の貼り付け」を追加したいと考えています。

例:右クリックメニューから"for文"→"終端セルまで"で以下の文を張り付ける
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
for i = 2 to Cells(Rows.Count, 1).End(xlUp).Select

next i
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

"選択範囲のコメントアウト"を追加したり、Excel側...続きを読む

Aベストアンサー

こんにちは。

× for i = 2 to Cells(Rows.Count, 1).End(xlUp).Select

○ For i = 2 to Cells(Rows.Count,1).end(xlUp).Row

ご希望に叶うかは分かりませんが、個人的なことですが、ちょうど、この件について、その貼り付けするツールの作者とのやり取りをこの間までしていたばかりです。

右クリックメニューでは、知りませんが、Ctrl + Shift + R のショートカットキーで、以下を登録してあります。
Lastrow=Cells(Rows.Count,1).End(xlUp).Row
これらのコード(テンプレート)は、40項目ぐらい登録しています。

ツールの名前は、「MZ-Tools」 といいます。MZは、マジンガーZの略だそうです。
VBAのみならず、VSでも使用できる、世界的に有名なツールのひとつです。

解説は以下で出ています。
https://www.ka-net.org/blog/?p=6260

現在は、Ver.8 で、$79.5 で、日本語対応もしていませんので、日本では、あまり一般的には購入されないとは思います。それでも、かつてVer.3 (フリー)は、皆の知られたツールでした。Ver.3 は、同じ機能はありましたから、ウィルスさえ気をつければ、本家にはありませんが、探せば見つかるかと思います。
https://www.mztools.com/index.aspx

なお、その昔は、VSSという、MSのディベロッパーバージョンの中にあったのですが、これはデータベース状にしてしまい、後がとても使いづらかったです。MZ-Tools には、ショートカットキーとは別に、お好みコード・エレメントという機能もついています。

こんにちは。

× for i = 2 to Cells(Rows.Count, 1).End(xlUp).Select

○ For i = 2 to Cells(Rows.Count,1).end(xlUp).Row

ご希望に叶うかは分かりませんが、個人的なことですが、ちょうど、この件について、その貼り付けするツールの作者とのやり取りをこの間までしていたばかりです。

右クリックメニューでは、知りませんが、Ctrl + Shift + R のショートカットキーで、以下を登録してあります。
Lastrow=Cells(Rows.Count,1).End(xlUp).Row
これらのコード(テンプレート)は、40項目ぐらい登録し...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング