• 締切済み

vba

excel VBAで 今ある列の連続した範囲(仮に$D$2:$D$8とか、$B$3:$B$7)とかがセレクトされているとする。 そのセレクトされている状態でTestマクロで処理し、それが例えば$D$2:$D$8の場合は、順に1,2,3,4,5,6,7というように1番から順にセルの個数まで数字を表示したい。($B$3:$B$7  なら順に1,2,3,4,5) Testマクロの記述は? なおTest2マクロでは、順に1,2,3,4,5,6,7のかわりに(1)、(2)、-- としたい。 Test2マクロの記述は? よろしく 

みんなの回答

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.3

何回も質問しているが、いくらかは自分で考えて見たらいかがかと。 いろいろなやりかたがあるが、 for ~nextでまわすより、下記が速いね。速さに意味がある質問かはわからないが。 Sub test3() Dim n As Long With Selection n = .Row - 1 .Formula = "=""("" & ROW()-" & n & " & "")""" .Copy .PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False Application.ErrorCheckingOptions.NumberAsText = False End With End Sub

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

>個数まで数字を表示したい。($B$3:$B$7  なら順に1,2,3,4,5).. msgboxで表示で良いのか、セルにセット(番号?セルの内容?)するのかあいまい。前者らしいが、実務で使う例あるかな) ーー Sub test02() i = 1 Range("D2:D8").Select For Each cl In Selection MsgBox cl.Value Cells(i, "F") = i 'Cells(i, "F") =cl.Value i = i + 1 Next End Sub ーー 上記で Range("D2:D8").Selectのセル範囲をどう採るかが、初心者 には問題だと思う。 操作者にのセル選択に任せるなら、この行を省いても良い。 ただしこのプログラムを走らすキッカケを作るボタンなどが必要で合おう。 2列以上選択された場合は良いのかな。 Application。InputBoxのType:=8というのもある(WEBで照会のこと)。 考えることはいっぱいあるよ。

全文を見る
すると、全ての回答が全文表示されます。
  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.1

こんな感じですかね。 Sub test1()   Dim wI   As Integer   wI = 0   For Each c In Selection     wI = wI + 1     c.Value = wI   Next End Sub Sub test2()   Dim wI   As Integer   wI = 0   For Each c In Selection     wI = wI + 1     c.NumberFormatLocal = "@"     c.Value = "(" & wI & ")"   Next End Sub

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • vba セレクション

    excellでVBAで 今ある列の連続した範囲(仮に$D$2:$D$8とか、$B$3:$B$7)とかがセレクトされているとする。 そのセレクトされている状態をマクロで処理し、そこに例えば$D$2:$D$8の場合は、順に2,3,4,5,6,7,8という数字を表示したい。その回答として Sub test1() For Each c In Selection c.Value = c.Row Next End Sub あるいはSub test2() With Selection .Formula = "=ROW()" .Value = .Value End With End Sub でできるのですが、 順に2,3,4,5,6,7,8という数字を表示のところを(2),(3),ーー,(8)と( )を付けて表示するにはどうすればいいか。

  • excel vba  セレクションされている範囲に対する処理

    excellでVBAで 今ある列の連続した範囲(仮に$D$2:$D$8とか、$B$3:$B$7)とかがセレクトされているとする。 そのセレクトされている状態をマクロで処理し、そこに例えば$D$2:$D$8の場合は、順に2,3,4,5,6,7,8という数字を表示したい。 $x$n:$x$mでも同様、n、n+1、n+2、---、m(xは何でもいい) Selection.addressというのを使用して処理するのでしょうか、教えてください。

  • Excel VBA 結合セルがある時に1列だけ選択

    A1からD1までの4つのセルが結合されている時に C列をクリックするとC列だけを選択できます。 これをVBAで記述するには どのように記述すればよいでしょうか。 マクロの記録では Columns("C:C").Select というコードが生成されるのですが マクロ記録時にC列だけが選択されていたのに 実行するとAからDの4列が選択されます。 読み込んだファイルを処理するので 結合セルの存在やセルは不定です。 よろしくお願いします。(Windows7,Excel2010)

  • VBA Rangeの足し算

    どもども、とってもVBA初心者です。 "A1"のセルに任意の数字をいれます. ・"B2"セルより"A1"に代入された数分、列を移動させたセルを選ぶマクロ ・"B2"セルより"A1"に代入された数分、行を移動させたセルを選ぶマクロ 本読んでもでてこないくらい初歩のようです。 よろしくお願いします。

  • セルの文字式の計算をVBAで行いたい

    A1のセルに "100+5n" という文字式が入っている状態で VBAにてこのセルの文字式計算を行いB1のセルから順に結果を出力したいと思っています。 "n"は1から順に指定された数まで1づつ増えていくようにし B1のセル:105、C1のセル:110、D1のセル:115 ・・・・ と結果がなるようにしたいのですが、VBAでどのように記述すればいいのか悩んでいます。 VBAを使わずにExcelの関数で計算できるのならそれでもよいと思っています。

  • エクセルでマクロを使った同一処理を列方向に繰返す?

    VBAの初心者です。マクロを使った同一処理を各列ブロック(3列が1単位)毎に 繰り返して列方向に多数のブロックまで行うVBAはどのようなものになるのでしょうか。 具体的には添付図のような表で、B2店について品名・数量・金額を、4行目~10行目まで、金額の多い順に並べかえた後、金額の合計をセルD2 に記入するマクロ(この記述は下記のようになりましたが)、この処理をE5店、H8店……と3列ずつ例えば20ブロック処理するプログラムはどのようにしたらよいでしょうか(20ブロック目の列番号はBG,BH,BIです)。どなたか教えていただけないでしょうか。 Sub 多い順と合計() Range("B3:D10").Select Selection.Sort Key1:=Range("D4"), Order1:=xlDescending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin Range("D2").Select ActiveCell.FormulaR1C1 = "=SUM(R[2]C:R[18]C)" Range("B2").Select End Sub

  • 【Excel VBA】特定の列で時間を入れているセルだけ合計して数式をセルにいれたい

    Excel VBA初心者です。 特定の列の各セル(B列とします)に時間(数字)、件数(数字)、文字列(○や×)が入っています。 この中でランダムな位置に入っている時間(数字)のみ拾い出し、合計欄(セルB20とします)に「数式(例)=sum(b3,b6,b8,b13,b18)」を入れたいのですが、マクロの組み方がわかりません。上記の特定のセルを抽出するところまではできたのですが。 マクロの組み方をご教授願えますか。

  • エクセルで順列の列挙

    例えば 1 と 2 という2個の数字(文字)がある場合,  A列 B列   1   2   2   1 1 2 3 という3個の数字(文字)がある場合,  A列 B列 C列   1   2   3   1   3   2   2   1   3   2   3   1   3   1   2   3   2   1 1 2 3 4 という4個の数字(文字)がある場合,  A列 B列 C列 D列   1   2   3   4   1   2   4   3    ~ 省略 ~   4   3   2   1 という具合に n 個の数字(文字)がある場合,過不足無く列挙させるマクロ(VBA)を教えてください。 Excelの仕様上65,536行までしかないので,「8個の場合」とかいう限定された個数でもかまいません。 また,123,132,213,…,321 という具合に数値として1列に並べる方法でもかまいません。 また昇り順でなくてもかまいません。 よろしくおねがいします。

  • エクセルVBA(値または文字の重複削除)

    先日まで何も出来ない状態でしたが、時間が出来たので、 またVBAを触り始めました。 質問はVBAで変数に代入されている値または文字の重複を削除したいのです。 セル範囲を取得し、変数に代入するまではいいのですが、 行列にまたがって範囲選択すると複数のセル位置(数値)が入ってしまいます。 例えば、D8からE9とD12からD13まで選択すると、変数の「セル位置」には「$D$8$E$8$D$9$E$9$D$12$D$13」が代入されますが、 $D$8=$E$8 $D$9=$E$9 数値の部分(内部は文字列ですが)が重なってしまいます。 これを、「$D$8$E$$D$9$E$$D$12$D$13」など数値(文字)のどちらかを削除出来ないものかと悩んでいます。 利用するのは数字の部分だけなので、その処理自体は問題ありません。 IF文でループさせて文字が存在するか見ているだけです。 また、比較自体も必ず偶数行だけですので、最後の「$」が無くても問題はありません。 For 始まり行 = セル開始行 To 入力行数 Step 2 If InStr(セル位置, "$" & Trim(始まり行) & "$") Then Exit For End If Next ただ、重複があるとそれも個数に含まれてしまい、計算がおかしくなります。 選択セル範囲の個数取得にはRange.Addressを使っています。 Dim rg As Range 'セル セル位置 = "" For Each rg In Selection セル位置 = セル位置 + rg.Address Next 縦1列なら大丈夫なのですが、複数列になると問題になります。 列行関係なく選択されたセルの行数が分かればいいだけなんですが・・・ 考え方だけでも構いませんので、よろしくお願いします。

  • VBAについて

    いつもお世話になっています マクロ・VBA超初心者です。 質問させてください。 現在シート1の完売のセルの欄に○が入っていれば日付をみてシート2の同じ日付の隣のセルに○を入力しようと思っているのですが、シート2の日付を検索はしているんですが入力がいきません Sheet1  ↓セルA1 ↓セルB1  5月26日   26           B1のセルはDAY(A1)にて出してます         完売  A氏     ○             Sheet2  ↓A列   ↓B列 5月  1日  ・  ・  ・  26日    ○           ←シート1の所に○が付いているとシート1セルB1と同じ  27日                  日付の隣のセルに○を入力  28日 VBA Sub test() Sheets("Sheet2").Select Range("A1").Select Do Until ActiveCell = "" ActiveCell.Offset(1, 0).Activate If ActiveCell.Value = Worksheets("Sheet1").Range("B2") Then ActiveCell.Offset(0, 1).Activate If ActiveCell.Value <> "○" Then ActiveCell.Valu = "○" ActiveCell.Offset(0, -1).Activate Else ActiveCell.Offset(0, -1).Activate End If Else End If Loop Sheets("Sheet2").Select Range("A1").Select End Sub どこが間違っているかわからない状態です。 分かりにくい説明ではあるんですが教えてください お願いします。

専門家に質問してみよう