初心者です。
現在、多くの画像を貼り付けたカタログを作っています。そこで、画像を挿入して配置するところまではマクロでできるようになりました。
マクロは指定したセルに番号を入れたら画像が配置されるといったFindを使ったマクロにしています。この画像が3000種類ほどあって、1ページあたり60枚を貼り付けています。ですので、1ページは1~60番の画像、2ページは61~120番の画像といったふうにしたいと思っています。

現在は番号を指定したセルに配置されるように別のマクロも作っています。
Sub 画像1から60()
Range("A4").Select
ActiveCell.FormulaR1C1 = "1"
Range("C4").Select
ActiveCell.FormulaR1C1 = "2"
・・・
ここで、ドロップダウンリスト(ユーザーフォーム?)で1~60番、61~120番、121~180番といった項目がでてきて、それをクリックしたら上で作ったマクロで番号を配置させるということをしたいと考えています。
説明が下手で申し訳ないですが、わかる方教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (10件)

#2です。



条件によって複数分岐する場合、個人的には Elseif を使う事は無く Select Case でやる場合が殆どです。
また、条件分岐は分けたい処理のみに特化すればコードを簡素化出来ます。
質問の内容だと #8のサンプルで、ComboBox1_Change の

      sh.ShapeRange.Height = 84
      sh.ShapeRange.Width = 84

      sh.ShapeRange.Height = 84
      If r.Offset(0, 3).Value = "D" Then
        sh.ShapeRange.Width = 52
      Else
        sh.ShapeRange.Width = 84
      End If
または
      sh.ShapeRange.Height = 84
      sh.ShapeRange.Width = 84
      If r.Offset(0, 3).Value = "D" Then sh.ShapeRange.Width = 52

にすれば良いだけに思えますが、、、

専属の回答者じゃないし、元の質問は解決してると思うので、ここでの回答はこれで最後にします。
    • good
    • 0
この回答へのお礼

たくさんのことを教えていただきました。ありがとうございました。

お礼日時:2007/10/03 19:52

#2です。



> 私が作った方は約5秒ほどで60枚の画像を挿入し終えます。作って頂いた方は約45秒。

画像のサイズにもよるでしょうが、こちらの環境で試すと2~3秒で終了します。
A列の番号を生かすためにあえてFINDを使ってますので、単純な行Indexで処理するように改修すれば若干早くなるかも。
あとは、画面の更新を止めると少し速くなります。(Change の最初と最後「←これ」の部分)

Private Sub ComboBox1_Change()
Dim myCnt As Long, myRow As Long, myCol As Integer, sh
On Error Resume Next
Application.ScreenUpdating = False  '←これ
     ・
     ・
     ・
End With
Application.ScreenUpdating = True  '←これ
End Sub

---

まぁ、もとの質問とかけ離れた回答で長くなってますし、あくまでサンプルなのでこの辺にしておこうと思います。
セル座標に規則性があるならば、少しだけ変えたプロシージャを複数用意するのではなく通常はループで処理をするって事を言いたかっただけですので。

最後に#3さんの補足に書かれたコードについて少しだけ指摘させてもらいます。
Select1のような変数名は、規定のメソッドやプロパティと区別しずらいので避けた方が無難かも知れません。
A5が「A~C」の何れなのかを判定するのに Find は不要だと思います。(直接 Value を見れば良い)
また、A5が「B」とそうでない時との違いはLockAspectRatio = msoTrue と IncrementTop 9# だけに思えますので「B」の時以外は処理を合わせられると思います。
実際に試して無いので確証はありませんが、以下でも同じような処理になるかと、、、

Sub Search01()
Dim Select1 As Range
Dim Select2 As Range

Set Select1 = Range("b3") '配置させるセル
Set Select2 = Range("b5") 'ファイル名が飛んできたセル

 'どのパターンでも同じ処理
 ActiveSheet.Pictures.Delete
 Filename = "C:\ファイル名" & Select2.Value
 Select1.Select
 ActiveSheet.Pictures.Insert(Filename).Select
 Selection.ShapeRange.LockAspectRatio = msoFalse
 Selection.ShapeRange.Height = 84
 Selection.ShapeRange.Width = 84

  'この処理は A5 が B の時のみ
  If Worksheets("sheet1").Range("A5").Value = "B" Then
    Selection.ShapeRange.LockAspectRatio = msoTrue
    Selection.ShapeRange.IncrementTop 9#
  End If

End Sub

この回答への補足

回答ありがとうございました。
質問とかけ離れたところでも、教えて頂き感謝しています。
>画面の更新を止めると少し速くなります。
これでかなり早くなりました。
もう一つだけ、教えて頂くことができるでしょうか?
いままでは教えてもらった、ユーザーフォームを使ったマクロでよかったのですが、条件が一つ加わりそうなんです。A、B、Cで分けていたところです。AとBは、縦横の比をそのままにするかどうかでいいのですが、Dが加わり、横幅を決めなくてはなりません。例えば、
sh.ShapeRange.Height = 84
sh.ShapeRange.Width = 52
のようにです。
いろいろいじってElseifを間に入れたりしているのですが、なかなかうまくいきません。よければ、教えてください。

補足日時:2007/09/24 21:31
    • good
    • 0

#2です。



1)シート名は「紋帳」と「deta」
2)ブックは画像と同じフォルダ内に1度は保存されている(フルパスを得る為)
3)シート名「data」は 1行目がタイトル行でA~D列にNo,名称,ファイル名,形式となっている

 A    B        C       D
 No  名称      ファイル名   形式
 1  いたどり    いたどり.EMF    C
 2  ひげ丸揚羽蝶  ひげ丸揚羽蝶.EMF  B
 3  ほいのし    ほいのし.EMF    A

4)ブックにUserForm と ComboBox を置いて下記コードをコピペ

という条件で、Excel2000で動作確認しています。
ただ、先のサンプルでも動作しないとの事ですので動かないかも知れません、、、
もし試す場合はテスト用ブックで。

'---------------------------------------------------
Private Sub UserForm_Initialize()
Dim i As Integer
 For i = 1 To 3060 Step 60
   Me.ComboBox1.AddItem i & "~" & i + 59 & "番"
 Next i
 Me.ComboBox1.Style = fmStyleDropDownList
End Sub

'---------------------------------------------------
Private Sub ComboBox1_Change()
Dim myCnt As Long, myRow As Long, myCol As Integer, sh
On Error Resume Next
myCnt = (Me.ComboBox1.ListIndex * 60) + 1
With Worksheets("紋帳")
 .DrawingObjects.Delete
 For myRow = 3 To 28 Step 5
   For myCol = 2 To 20 Step 2
    Set r = Worksheets("deta").Columns(1).Find(myCnt, _
        after:=Worksheets("deta").Range("A1"), LookAt:=xlWhole)
    If Not r Is Nothing Then
     .Cells(myRow + 2, myCol).Value = r.Offset(0, 1)
     fName = ThisWorkbook.Path & "\" & Trim(r.Offset(0, 2).Value)
     If Dir(fName) <> "" And r.Offset(0, 2) <> "" Then
      Set sh = .Pictures.Insert(fName)
      sh.Left = .Cells(myRow, myCol).Left
      sh.Top = .Cells(myRow, myCol).Top
      sh.ShapeRange.LockAspectRatio = msoFalse
      If r.Offset(0, 3).Value = "B" Then
        sh.ShapeRange.LockAspectRatio = msoTrue
        sh.ShapeRange.IncrementTop 9#
      End If
      sh.ShapeRange.Height = 84
      sh.ShapeRange.Width = 84
     Else
      Set sh = .Shapes.AddShape(msoShapeRectangle, _
           .Cells(myRow, myCol).Left, _
           .Cells(myRow, myCol).Top, 84, 84)
      sh.TextFrame.Characters.Text = r.Offset(0, 2) & vbCrLf & "NoImage"
     End If
    Else
      .Cells(myRow + 2, myCol).Value = ""
    End If
      myCnt = myCnt + 1
   Next myCol
 Next myRow
End With
End Sub

この回答への補足

ありがとうございました。
すべてうまくいきました。感謝いたします。
気になる点を1つ教えてください。
マクロのコードは全く違っていたものの、私が作ったマクロとpapayukaに作って頂いたマクロでは、画像の挿入時間が異なります。作っていただいた方がかなり時間がかかっているようです。私が作った方は約5秒ほどで60枚の画像を挿入し終えます。作って頂いた方は約45秒。複雑なコードで条件が重なっているからですかね?
ともあれ、完成してよかったです。ありがとうございました。

補足日時:2007/09/22 18:51
    • good
    • 0

#2です。



> デバックは Set sh = .Pictures.Insert(fName)のところでとまります。

ExcelのバージョンによってVBAが上手く動かない場合もありますが、、、(当方Excel2000です)
まったく動かないのか、途中で止まるのか解りませんが今回のケースはファイルが見つからない為だと思います。
そのパスに実際にファイルが無いか、生成したフルパスが違うか、、、
デバックプリントか、メッセージボックスでフルパスを確認してみては?

Sub Test()
Dim sh As Picture, fName As String
For i = 2 To 4
  Set r = Worksheets("deta").Cells(i, 3)
  fName = "C:\kamondeta\" & r.Value
  Debug.Print fName
  MsgBox fName
Next i
End Sub
    • good
    • 0

#2です。



> 途中でデッバクして止まってしまいます。

どの行でデバックして止まり、どんなメッセージが出るか書いてないので詳細は解りかねますが、恐らく指定したファイルが無いのだと想像しています。
Sheet2のB列に拡張子を含むファイル名がある想定です。

  1 いたどり いたどり.EMF C

Sheet2に上記の指定をしてるなら、少なくとも下記じゃないと動きません。

  1 いたどり.EMF C

また、Sheet2の1行目にタイトル行があるならば ループの開始番号を 2 に変更しないと動きません。


> このマクロの場合、ファイル名を指定するセルはないのでしょうか?

「B5 にファイル名を入れて、B3に表示」はひとつの画像だけを対象にした処理だと思います。
サムネイル画像を並べて、画像一覧を作成したいのでは無いのでしょうか?
ファイル名は「シート名"deta"(例ではSheet2)」に書いてあるならば、それを読みに行けば B5を見に行かなくても処理は可能です。

Search01~Search60 は内容的にどんな違いがあるのでしょう?

> Set Select1 = Range("b3") 配置させるセル
> Set Select2 = Range("b5") ファイル名が飛んできたセル
> Set Obj1 = Worksheets("sheet1").Range("a5").Find("A", LookIn:=xlValues)
> Set Obj2 = Worksheets("sheet1").Range("a5").Find("B", LookIn:=xlValues)
> Set Obj3 = Worksheets("sheet1").Range("a5").Find("C", LookIn:=xlValues)

上記を少しずつ変えてあるのかなと想像しているのですが、、、

この回答への補足

回答ありがとうございます。
>どの行でデバックして止まり、どんなメッセージが出るか書いてないので詳細は解りかねます。

デバックは Set sh = .Pictures.Insert(fName)のところでとまります。

少し書き換えて
Sub Test()
Dim sh As Picture, fName As String
For i = 2 To 4
Set r = Worksheets("deta").Cells(i, 3)
fName = "C:\kamondeta\" & r.Value
With Worksheets("紋帳")
Set sh = .Pictures.Insert(fName)
sh.Left = .Cells(1, i).Offset(0, i - 1).Left
sh.Top = .Cells(1, i).Offset(0, i - 1).Top
sh.ShapeRange.LockAspectRatio = msoFalse
If r.Offset(0, 1).Value = "B" Then
sh.ShapeRange.LockAspectRatio = msoTrue
sh.ShapeRange.IncrementTop 9#
End If
sh.ShapeRange.Height = 84
sh.ShapeRange.Width = 84
End With
Next i
End Sub
detaというシートのC列目の2行目からEMFファイルを並べています。
「紋帳」というシートに画像を貼り付けたいと思っています。

>サムネイル画像を並べて、画像一覧を作成したいのでは無いのでしょうか?
画像を並べるのですが、その画像それぞれの下にファイル名を表示させたいと思っています。例えば、「いたどり」の画像の下には”いたどり”と。ですので"deta"シートのB列とC列に家紋の名前とEMFの画像名をそれぞれ並べています。やり方によってはどちらかひとつあればできるのでしょうけど…ちなみに私が今作っているコードは
A4に1を入力 →数式でA5にA・B・Cのパターンが入る。
      →数式でB4にいたどりと入る。
      →数式でB5にいたどりEMFと入る。
マクロでB5を参照し、kamondetaというフォルダ(Cドライブ直下)から検索し、B3に画像を貼り付ける。
といった流れです。

>Search01~Search60 は内容的にどんな違いがあるのでしょう?
Search01とSearch02の違いは
Set Select1 = Range("b3")
Set Select2 = Range("b5")
Set Obj1 = Worksheets("紋帳").Range("a5").Find("A", LookIn:=xlValues)
Set Obj2 = Worksheets("紋帳").Range("a5").Find("B", LookIn:=xlValues)
Set Obj3 = Worksheets("紋帳").Range("a5").Find("C", LookIn:=xlValues)

Set Select1 = Range("d3")
Set Select2 = Range("d5")
Set Obj1 = Worksheets("紋帳").Range("c5").Find("A", LookIn:=xlValues)
Set Obj2 = Worksheets("紋帳").Range("c5").Find("B", LookIn:=xlValues)
Set Obj3 = Worksheets("紋帳").Range("c5").Find("C", LookIn:=xlValues)
の違いです。つまり、貼り付ける画像を呼び出すセル番地と貼り付け先の番地が異なるだけです。
これをForなどで簡単にするんですよね。まだ、勉強不足で…

補足日時:2007/09/21 21:09
    • good
    • 0

#2です。



> 現在の私が作ったマクロは番号を入れることでファイル名を別のセル(B5)にとばせ、
> それをFindを使って検索させています。

データの持ち方とかが不明なので、質問を理解する事が出来ません。

 # 何処かに番号を入れると、VLOOKUPで B5 にファイル名が入る?
 # A5 に入る「A,B,C」もVLOOKUPで持ってきている?

そもそもVLOOKUPで番号によってファイル名を持ってこれるならば、何処かのシートにでも下記のような対比表があるって事ですか?
 A列  B列  C列
 1 hoge.jpg A
 2 hige.jpg B
 3 hage.jpg C

そうならば、ファイル名が番号であるのと変わりない状況だと思います。
要はループで処理出来る状況か否かって事です。

例えば、Sheet2 の A1:C3 に上記の表があり、Cドライブに該当ファイルがあるとして、

Sub Test()
Dim sh As Picture, fName As String
For i = 1 To 3
  Set r = Worksheets("Sheet2").Cells(i, 2)
  fName = "C:\" & r.Value
  With Worksheets("Sheet1")
   Set sh = .Pictures.Insert(fName)
     sh.Left = .Cells(1, i).Offset(0, i - 1).Left
     sh.Top = .Cells(1, i).Offset(0, i - 1).Top
     sh.ShapeRange.LockAspectRatio = msoFalse
     If r.Offset(0, 1).Value = "B" Then
       sh.ShapeRange.LockAspectRatio = msoTrue
       sh.ShapeRange.IncrementTop 9#
     End If
     sh.ShapeRange.Height = 84
     sh.ShapeRange.Width = 84
  End With
Next i
End Sub

とか。
この例ではA列の番号は意味を成してませんけど、、、

この回答への補足

回答ありがとうございます。
>何処かのシートにでも下記のような対比表があるって事ですか?
その通りです。シート名"deta"というシートに
A B C D
1 いたどり いたどり.EMF C
2 ひげ丸揚羽蝶 ひげ丸揚羽蝶.EMF B
3 ほいのし ほいのし.EMF A
のように入力しています。

作って頂いたマクロを試してみているのです、途中でデッバクして止まってしまいます。新しいBookに”Sheet2 の A1:C3 に上記の表があり、Cドライブに該当ファイルがあるとして”というふうに作ってもダメみたいです。なぜでしょうか?
また、このマクロの場合、ファイル名を指定するセルはないのでしょうか?(例えば、Sheet1のシートのセル番地B5に”いたどり.EMF”と入力したらセル番地B3画像が入るといったように)
わからないことばかりですが、どうかご教授下さい。

補足日時:2007/09/20 21:07
    • good
    • 0

#2です。



> この開始番号を3000という桁違いの数までしていくマクロはあるでしょうか?

ってところについて、先のサンプルを修正します。
UserForm に ComboBox を1つ置いて下記です。

'---------------------------------------------------
Private Sub UserForm_Initialize()
Dim i As Integer
 For i = 1 To 3060 Step 60
   Me.ComboBox1.AddItem i & "~" & i + 59 & "番"
 Next i
 Me.ComboBox1.Style = fmStyleDropDownList
End Sub

'---------------------------------------------------
Private Sub ComboBox1_Change()
Dim myCnt As Long, myRow As Long, myCol As Integer
 myCnt = (Me.ComboBox1.ListIndex * 60) + 1
 With ActiveSheet
   For myRow = 4 To 29 Step 5
     For myCol = 1 To 19 Step 2
       .Cells(myRow, myCol).Value = myCnt
       myCnt = myCnt + 1
     Next myCol
   Next myRow
 End With
End Sub

'---

#3さんへの補足に書かれたコードは読んでませんが、Search01 ~ Search60 のようにちょっとだけ変えたプロシージャを作る必要はおそらく無いのでは、と感じます。

また、やりたいのはユーザーに番号を選ばせた上で印刷する事なのか、画像を入れ替えながらいっきに印刷させたいだけなのかで、アプローチも違ってくると思います。

ちなみに下記は Cドライブ直下にある 001.jpg、002.jpg、003.jpg をSheet1に挿入して並べるサンプルです。
実行する前に画像を消す処理はしてませんけど。

Sub Test()
Dim sh As Picture, fName As String
For i = 1 To 3
 fName = "C:\" & Format(i, "000") & ".jpg"
  With Worksheets(1)
   Set sh = .Pictures.Insert(fName)
     sh.Left = .Cells(1, i).Offset(0, i - 1).Left
     sh.Top = .Cells(1, i).Offset(0, i - 1).Top
     sh.Height = 84
     sh.Width = 84
  End With
Next i
End Sub

この回答への補足

回答ありがとうございます。ユーザーフォームのところは解決しました感謝申し上げます。
画像配置のところですが、サンプルを自分なりにいじってみていますが、これはファイル名が数字になっていることが前提ですよね。私が貼り付けたい画像には漢字を含む名前がついていて、その名前を検索して貼り付けたいと考えています。現在の私が作ったマクロは番号を入れることでファイル名を別のセル(B5)にとばせ、それをFindを使って検索させています。この番号とファイル名は不確定で、後々入れ替わることがあるため、ファイル名を数字にしていません。
また、ファイル名によって縦横の比率を変えるものと変えないものがあり、それをA,B,Cでパターンを変えています。サンプルはすべて正方形で出てきますよね。これらの条件を満たすコードがすっきりと作ることができれば教えてください。
意味がわかりづらくてすいません…

補足日時:2007/09/18 20:01
    • good
    • 0

全体の構造がいまいちつかめませんので、開始番号を割り当てる部分だけ取り上げます。

開始番号自体を配列に組み込んでしまえばできると思います。
--------------------------------------------------------
Public Sub a()
  Const MinCnt As Byte = 1
  Const MaxCnt As Long = 3000
  Const CngCnt as Long = 60
  Dim myAry() As Variant
  Dim myCnt As Long
  Dim i As Long
  i = 0
  myCnt = MinCnt + i * CngCnt
  Do While myCnt <= MaxCnt
    ReDim Preserve myAry(0 To i) As Variant
    myAry(i) = myCnt
    i = i + 1
    myCnt = MinCnt + i * CngCnt
  Loop
End Sub
--------------------------------------------------------
上限を3000としています。
配列myAryは引数iの値によって決まるわけですから、iが0の場合は1、49の場合は2941になります。
なお、MinCnt(最小値)、MaxCnt(最大値)、CngCnt(変更幅)を設定すればどんな形でも対応できると思います。
加工してみてください。

この回答への補足

説明不足で大変申し訳ないです。
細かく説明すると、カタログには縦6行・横10列の画像です。それを印刷したものを1ページとして最後にとじ合わせたいと思います。この画像を挿入させるコードが下記の通りです。少し複雑でファイルすべての画像が、同じ貼り付け方ではなく3パターンあり、A,B,Cで判別して配置させています。
Sub Search01()

Dim Select1 As Variant
Dim Select2 As Variant
Dim Obj1 As Object
Dim Obj2 As Object
Dim Obj3 As Object

Set Select1 = Range("b3") 配置させるセル
Set Select2 = Range("b5") ファイル名が飛んできたセル
Set Obj1 = Worksheets("sheet1").Range("a5").Find("A", LookIn:=xlValues)
Set Obj2 = Worksheets("sheet1").Range("a5").Find("B", LookIn:=xlValues)
Set Obj3 = Worksheets("sheet1").Range("a5").Find("C", LookIn:=xlValues)
ActiveSheet.Pictures.Delete
Filename = "C:\ファイル名" & Select2.Value
If Not Obj1 Is Nothing Then
Select1.Select
ActiveSheet.Pictures.Insert(Filename).Select
Selection.ShapeRange.LockAspectRatio = msoFalse
Selection.ShapeRange.Height = 84
Selection.ShapeRange.Width = 84
ElseIf Not Obj2 Is Nothing Then
Select1.Select
ActiveSheet.Pictures.Insert(Filename).Select
Selection.ShapeRange.LockAspectRatio = msoTrue
Selection.ShapeRange.Height = 84
Selection.ShapeRange.Width = 84
Selection.ShapeRange.IncrementTop 9#
ElseIf Not Obj3 Is Nothing Then
Select1.Select
ActiveSheet.Pictures.Insert(Filename).Select
Selection.ShapeRange.LockAspectRatio = msoFalse
Selection.ShapeRange.Height = 84
Selection.ShapeRange.Width = 84
Else
Select1.Select
ActiveSheet.Pictures.Insert(Filename).Select
Selection.ShapeRange.LockAspectRatio = msoFalse
Selection.ShapeRange.Height = 84
Selection.ShapeRange.Width = 84

End If
End Sub
Sub Search02()

Dim Select1 As Variant
Dim Select2 As Variant
・・・
End Sub
といったSearchが1~60まであり、これを
Sub 連続()
Search01
Search02
・・・
Search59
Search60
End Sub
上記のように1つにまとめてファイル名を検索させ、配置させています。そのファイル名を番号を入力すれば出てくるようVlookupで関数を入れています。2ページ以降は同じセルを使い番号だけを変えて番号入力→印刷→番号入力→印刷としていくつもりです。ただ、この画像が3000枚ほどあり、単純に1ページに60枚つまり50ページほどになります。
よくよく考えたら、ドロップダウンリストに1~60番、61~121番と出てきて画像を配置できても、このドロップダウンリストには500行並んで探すのも大変だなと思い、1シートに4ページ分ぐらいをまとめて作った方がいいのかな…などと考え直しています。
何かいい方法があれば教えてください。

補足日時:2007/09/17 22:17
    • good
    • 0

Excelで大量の画像を扱う事については正直いってお勧め出来ません。


マクロで画像を挿入-配置するとありますが、マクロを再実行した場合に以前の画像を削除する仕様になっていないと、まったく同じ場所に画像が重なって配置されていき、やがてはブック容量肥大でファイルが破損しかねませんので、、、

仕様が良く理解できませんが、UserForm と ComboBox の使い方って事でサンプルを書きます。
試す場合は必ず新規ブックで試して下さい。
UserForm に ComboBox を1つ置いて、UserFormをダブルクリックして、空いている場所に下記をコピペ
実行して ComboBox を切替えると ActiveSheet に番号を入れます。

'---------------------------------------------------
Private Sub UserForm_Initialize()
Dim s
 s = Array("1~60番", "61~120番", "121~180番")
 For i = 0 To 2
   Me.ComboBox1.AddItem s(i)
 Next i
 Me.ComboBox1.Style = fmStyleDropDownList
End Sub

'---------------------------------------------------
Private Sub ComboBox1_Change()
 Select Case Me.ComboBox1.ListIndex
  Case 0: myCnt = 1
  Case 1: myCnt = 61
  Case 2: myCnt = 121
  Case Else: Exit Sub
 End Select
 With ActiveSheet
   For myRow = 4 To 29 Step 5
     For myCol = 1 To 19 Step 2
       .Cells(myRow, myCol).Value = myCnt
       myCnt = myCnt + 1
     Next myCol
   Next myRow
 End With
End Sub

この回答への補足

ありがとうございます。リストの中身までマクロを組んで頂いて助かりました。図々しく追加質問をしてもいいでしょうか?
Case 0: myCnt = 1
Case 1: myCnt = 61
Case 2: myCnt = 121
といったように開始番号を割り当てるマクロがありますが、この開始番号を3000という桁違いの数までしていくマクロはあるでしょうか?
意味が伝わりにくいかと思いますのでイメージを書きます。
Case 0: myCnt = 1
Case 1: myCnt = 61
Case 2: myCnt = 121
・・・
Case 498: myCnt = 2881
Case 499: myCnt = 2941
Case 500: myCnt = 3001
上のようなマクロを地道にしていくのは大変ですので、何かいい方法があれば教えてください。

補足日時:2007/09/17 20:18
    • good
    • 0

エクセルでは「ページ」というのは無いはずなんだが(紙に印刷したもののページは別として)、シートのことですか。


あるいは勝手に1-60行を1ページと考えているのかな。
ーー
それと1-60などドロップダウンの行数としては多すぎるのと、数字をそれで選ぶのは、ただ、質問者がドロップダウンリストができるようになったので凝っただけではないですか。
数字をテキストボックスに入れて、該当シート(私の推定)を割り出し、端数でそのシートの何番目かを割り出し、画像をコピーしてくるとかにするとかどうですか。

この回答への補足

説明が下手で申し訳ないです。
カタログを作成しており、そこには縦6行・横10列の画像が貼り付けられており、それを印刷した物を1ページと表記していました。
ドロップダウンリストでは1~60番、61~120番といった表記がされるようにとの意味でした。

補足日時:2007/09/17 20:14
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

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

Qエクセル プルダウンの作り方

お世話になります。
エクセルでプルダウンの作り方を教えていただけませんでしょうか?
住所を▼のボタンでクリックしたら【北海道,青森,秋田,岩手・・・】などの選択ができるようにしたいのです。
宜しくお願いします。

Aベストアンサー

メニューから「データ」、「入力規則」、「設定」で「入力値の種類」を「リスト」を選択します。
そうすると「元の値」という表示がでますので、そこで前もって作っておいたリストの範囲を指定します。
多くないのでしたら、そのままそこにカンマで区切って入力しても出来ます。

Qドロップダウンリストの作り方

お世話さまです。

エクセルでセルに入力する文字列を限定するための方法で
セルの右上に"逆三角マーク”ができて、
ここを押すと、あらかじめ定義していたセル内の文字列ができる。

入力が制限できる方法をおしえてください。

Aベストアンサー

[データ]-[入力規則]

http://officetanaka.net/excel/function/tips/list.htm#list01

Qエクセルでプルダウンメニューの作り方

  エクセルの画面で、よく三角形を逆さまにした形をクリックするといくつかメニューが出てき、どれかを選べるようになっていますが、その作り方を教えてください。
 会社で人事を担当していますが、三角形(プルダウンボタン)をクリックすると社員氏名一覧が表示され、そこから選択できるようにしたいのです。
 しばらく自力でいろいろやってみましたが、さっぱり見当がつかず、どうやればいいのか分かりませんでした。よろしくお願いします。

Aベストアンサー

こんばんは!
当方使用のExcel2003での一例です!

↓の画像のようにSheet2に名簿表を作成しておきます。
画像ではSheet2のA2セル以降を範囲指定 → 名前ボックスに仮に「名簿」と入力しOK
これで範囲指定したセルが「名簿」と名前定義されましたので、

Sheet1のリスト表示させたいセルを範囲指定 → メニュー → データ → 入力規則
→ リスト → 「元の値」の欄に
=名簿
としてOK

これでSheet1のセルをアクティブにすると右側に下向き▼が表示されますので、そこをクリック!
これで希望に近い形にならないでしょうか?
Excel2007の場合は↓のURLが参考になるかもしれません。

http://www.eurus.dti.ne.jp/~yoneyama/Excel2007/excel2007-ny_kis2.html

尚、同一Sheetに「名簿表」を作成する場合は名前定義する必要はなくて
「元の値」の右側の四角をクリックし、リスト表示したいセルをそのまま範囲指定すればOKです。

以上、お役に立てば良いのですが・・・m(_ _)m

こんばんは!
当方使用のExcel2003での一例です!

↓の画像のようにSheet2に名簿表を作成しておきます。
画像ではSheet2のA2セル以降を範囲指定 → 名前ボックスに仮に「名簿」と入力しOK
これで範囲指定したセルが「名簿」と名前定義されましたので、

Sheet1のリスト表示させたいセルを範囲指定 → メニュー → データ → 入力規則
→ リスト → 「元の値」の欄に
=名簿
としてOK

これでSheet1のセルをアクティブにすると右側に下向き▼が表示されますので、そこをクリック!
これで希望に近い形にならない...続きを読む

Qドロップダウンリストについて

ドロップダウンリストの作成についてお願いします。
列にドロップダウンリストを作る方法はわかるのですが、行に作る方法がわかりません。
可能なのでしょうか?また、できればその方法について教えていただきたいです。
よろしくお願いします。
EXCEL2004forMac
OS:mac OS X 10.4.8
使用しています。

Aベストアンサー

◆こういうことでしょうか
   A   B   C   D   E
1  あ  い  う  え  お
★入力規則で「リスト」にして、「元の値」を
=A1:E1

Qエクセル(Excel) 納品書の作り方【画像修正版

昨日http://oshiete.goo.ne.jp/qa/7348426.htmlで質問させていただき、詳しくご回答いただき少し進んだのですが、状況が変わったので改めて質問させていただきます。

■エクセル(Excel)で納品書の作成をしています。
シート1に納品書、シート2に商品マスタ(一覧)を作っていて、シート2の一覧を反映させて
納品書に番号を打ち込むだけで、商品名・単価までが出るシステムを作りたいのですが、
昨日のご回答の中の「VLOOKUP」?を入れて、自分なりにマス目の数字を変えてやってみたのですが
反映されずN/?のようなエラーになってしまいます。

※画像が見にくかったのでシート<CENTER></CENTER>だけにしました。

1、上記のように、シート2との関連付けの係数を、写真の場合の数字で教えてください。

2、合計と、合計から20%を引いた数値を割り出す関数も、写真の数字で御願いします。

宜しくご教授お願い致します。

Aベストアンサー

こんばんは!
前回投稿した者です。

当方もかなり古い(人間も古い!なぁ~んちゃって!)Excel2003を使用しています。
↓の画像のようにSheet2にデータを作成しておきます。

#N/A というエラーは、「検索値」がない!ということですので
お示しの画像のB列にSheet2のA列にないデータを入力するとそういったエラーが表示されます。

画像のセル配置ですと
C4セルに
=IF($B4="","",VLOOKUP($B4,Sheet2!$A:$C,COLUMN(B1),0))
(「$」マークの位置に気を付けてください)
という数式を入れD4セルまでオートフィルでコピー!
そのまま最後の24行目までコピーしておきます。

F4セルには
=IF(COUNTBLANK(B4:E4),"",D4*E4)
という数式を入れ、F24までオートフィルでコピー!

これでB列に商品番号を入力すればSheet2のデータが反映され、
E列に数量を入力でF列に金額が表示されると思います。

最後に合計金額のF26セルは
=IF(COUNT(F4:F24),SUM(F4:F24),"")
手数料のF27セルは
=IF(F26="","",F26*0.2)

これで何とか形にならないでしょうか?

※ 振込金額の欄は不明ですので手を付けていません。

参考になりますかね?m(_ _)m

こんばんは!
前回投稿した者です。

当方もかなり古い(人間も古い!なぁ~んちゃって!)Excel2003を使用しています。
↓の画像のようにSheet2にデータを作成しておきます。

#N/A というエラーは、「検索値」がない!ということですので
お示しの画像のB列にSheet2のA列にないデータを入力するとそういったエラーが表示されます。

画像のセル配置ですと
C4セルに
=IF($B4="","",VLOOKUP($B4,Sheet2!$A:$C,COLUMN(B1),0))
(「$」マークの位置に気を付けてください)
という数式を入れD4セルまでオートフィルで...続きを読む

Qドロップダウンメニューのコマンドの横の( )は

初心者的質問で恐縮です。
ワード・エクセル等で、メニューをクリックしてドロップダウンメニューが出ますが、それぞれのコマンドの横に(W)のような括弧で囲まれたアルファベットが出ていますが、これの意味って何でしょうか?

Aベストアンサー

アクセスキーですね。
ショートカットキーだと[ Ctrl+C ]キーや[ Ctrl+V ]キーのように何か
のキーを組み合わせてある機能をキーボードにて操作するものですが、
アクセスキーではそのメニューが表示されている場合(キーの順で表示
していると同じことでも可能)、[ Alt ]キーを押してから括弧にて表示
されている英字一文字のキーを押すことで、マウスでの選択をするより
も早く選択できますし、プルダウンメニュー(ドロップダウンメニュー)
やダイアログが開く前に選択することが可能になります。

例えばWordの[ページ設定]ダイアログを出したい場合、[ Alt ]キーを
押してから[ F ]キーを押し[ U ]キーを順に押せば出てきます。
[ルーラー]の余白部分や[垂直ルーラー]部分をダブルクリックする方法
もありますが、マウスを持ち替える手間よりキーボードから手を離さず
に済むアクセスキーのほうが早いですからね。
もっと早くしたいならショートカットキーを[ページ設定]ダイアログを
出すコマンドに設定すれば[ Ctrl ]キーや[ Shift ]キーや[ Alt ]キー
を組み合わせて、一緒に押す操作をするで一つの操作だけで出すことも
できます。
Wordにはコマンドがたくさん用意されていますからショートカットキー
が設定しやすいですが、Excelではコマンドが限定されていますしキー
の割り当てがショートカットキーについては限られますから、Excelで
はアクセスキーを覚えたほうが早いかもしれません。

参考情報
アクセスキーとショートカットキーについて
http://support.microsoft.com/kb/406949/ja
Office 製品において 右クリックをして表示されるショートカット
メニューでアクセス キーが重複している
http://support.microsoft.com/kb/934461/ja
メニューのアクセスキーを変更するには
http://support.microsoft.com/kb/882042/ja

アクセスキーですね。
ショートカットキーだと[ Ctrl+C ]キーや[ Ctrl+V ]キーのように何か
のキーを組み合わせてある機能をキーボードにて操作するものですが、
アクセスキーではそのメニューが表示されている場合(キーの順で表示
していると同じことでも可能)、[ Alt ]キーを押してから括弧にて表示
されている英字一文字のキーを押すことで、マウスでの選択をするより
も早く選択できますし、プルダウンメニュー(ドロップダウンメニュー)
やダイアログが開く前に選択することが可能になります。

例え...続きを読む

Qエクセル(Excel) 納品書の作り方【改めて】

昨日http://oshiete.goo.ne.jp/qa/7348426.htmlで質問させていただき、詳しくご回答いただき少し進んだのですが、状況が変わったので改めて質問させていただきます。

■エクセル(Excel)で納品書の作成をしています。
シート1に納品書、シート2に商品マスタ(一覧)を作っていて、シート2の一覧を反映させて
納品書に番号を打ち込むだけで、商品名・単価までが出るシステムを作りたいのですが、
昨日のご回答の中の「VLOOKUP」?を入れて、自分なりにマス目の数字を変えてやってみたのですが
反映されずN/?のようなエラーになってしまいます。

※画像が貼り付けてあります。商品名は1番以外伏せさせていただいています。
くっつけてありますが、左側がシート1・右側がシート2です。

1、上記のように、シート2との関連付けの係数を、写真の場合の数字で教えてください。

2、合計と、合計から20%を引いた数値を割り出す関数も、写真の数字で御願いします。

宜しくご教授お願い致します。

Aベストアンサー

画像がいまいちよく見えないのですが、納品書の項目は左から、No、商品番号、商品名、単価、数量、金額でいいのでしょうか(名前は多少違っていても意味があっていればもんだいないです)

でしたら、
C1セルに=IF(ISBLANK(B2),"",VLOOKUP(B2,Sheet2!$A$2:$C$200,2,FALSE))
D1セルに=IF(ISBLANK(B2),"",VLOOKUP(B2,Sheet2!$A$2:$C$200,3,FALSE))
E1セルは空白で
F1セルに=IF(D2="","",D2*E2)
といれて、C1からF1までをコピーしてその下の行にタテに貼り付ければ出来ますよ。
おそらくエラーが出たのは、コピーしたときにVLOOKUP関数の最初のセルの指定がずれてしまっているのでは無いかと思いますよ。     

QExcel2007でリンク貼り付け

お世話になります。

主シートに列幅の違う副シートの表をリンク貼り付けすると
主シートの列幅になってしまいます。

Excel2000では副シートの列幅のまま張り付いてくれますが

Aベストアンサー

「リンク貼り付け」の直前に、
「貼り付け」の▼を押して、「形式を選択して貼り付け」→「列幅」のラジオボタンをオンにして「OK」の操作を加えてみてください。

Qエクセル2007でプルダウンで選んだものに反応

Excel2007でプルダウンで選んだものに反応して隣のセルが自動入力される方法(エクセル2007)
A1をプルダウンで「猫」「犬」から選べるようにし、「猫」を選んだ場合B1に自動に「111」が、「犬」を選んだ場合B1に自動に「222」と入力されるようにしたいです。
ご教授の程、宜しくお願いします。

Aベストアンサー

VLOOKUP関数での方法です。
(1)別シートに入力文字列と対応コード表を作成。(仮にSheet2のA:B列範囲で順不同)
(2)B1に=IF(COUNTIF(Sheet2!A:A,A1),VLOOKUP(A1,Sheet2!A:B,2FALSE),"")を設定
   入力文字列が存在しない場合は空白としています。

Qワードで作った表をパワーポイントに貼り付けたい

ワードで表を作ったんですが、パワーポイントにコピーペーストで貼り付けようとしたら罫線が無視されてうまく貼り付けができません。

良い方法はないでしょうか?

Aベストアンサー

テキストボックスの中に貼り付けてませんか?
テキストボックスの外に貼り付けてみてください。そのまま表形式で貼り付けられると思います。


人気Q&Aランキング

おすすめ情報