<   2006年 01月 ( 13 )   > この月の画像一覧

SUMPRODUCT関数で最大値を求める

DMAX関数を使って条件に合う最大値を求める方法は紹介したが、今回はSUMPRODUCTを使って同様に求めてみた。
e0080122_10265037.gif

この方法だと、DMAXの時に必要だった条件を指定する別表が不必要になることだろう。
また、これ以外にもSUMPRODUCTは様々な関数と組み合わせて便利な使い方があるが、これはいずれまた。
[PR]
by slayer0210 | 2006-01-30 10:29 | エクセル一般

DMAX関数で最大値

e0080122_9535395.gif

この表の中で靴下を購入した数が最大なのは?ということだが、一般的にはDMAX関数を使用するとよいだろう。
=DMAX(Database,フィールド,Criteria)』という感じに組み立てていく。
Databaseだが、見出しが入力された表全体を参照しておく。
e0080122_103918.gif
フィールドには使用する列を指定。今回はセルを指定したが、"数量"などと文字列指定でもいいと思う。
e0080122_10102778.gif
Criteriaは指定した条件が設定されているセル範囲を指定。
[PR]
by slayer0210 | 2006-01-30 10:14 | エクセル一般

TEXT関数で数値と文字列を結合

e0080122_845385.gif

上図のように数値と文字列を1つのセルに表示させたい場合は、『&』をつかって連結しても大丈夫だが、
今回はTEXT関数を使用してみた。
TEXT関数は『TEXT(値,表示形式)』という感じで設定すればよい。
#,##0 と #,### の違いだが、もし表示する数値がない場合で比較すると、前者は「0」を表示し、後者は表示しないの差だろう。
[PR]
by slayer0210 | 2006-01-30 08:52 | エクセル一般

PRODUCT関数で積を求める

数値の乗算をする場合は通常は『=A1*B1』のような式を立てる。しかし乗算する数値が複数に及んだ場合は、いちいち『*』を入力するのも面倒なときがある。
そんなときはPRODUCT関数を使用するとよい。
e0080122_7421876.gif

PRODUCT関数を用いて積を求めた場合には、文字列、理論値、エラー値などは無視され、
数値のみの乗算となるので、『*』で計算した時のようなエラーが出ない。
[PR]
by slayer0210 | 2006-01-30 07:46 | エクセル一般

任意の範囲に写真を挿入する

写真を挿入すると、サイズが大小様々だったり、また貼り付けられる位置も任意の場所には張り付かない。
そんな時の為に便利な(?)マクロを作ってみた。

Sub 任意の範囲に写真を挿入()
 Dim myFname As String
 Dim myrange As Range
 Dim 元図 As Object
   myFname = Application.GetOpenFilename(FileFilter:="すべての図(*.jpg),*.jpg")

    If myFname = "False" Then Exit Sub
   On Error GoTo erhand
    Set myrange = Application.InputBox("取り込み範囲をドラッグして下さい", "任意の範囲をドラッグ", Type:=8)
    Set 元図 = ActiveSheet.Pictures.Insert(myFname)
     With 元図
       .Height = myrange.Height
       .Width = myrange.Width
       .Top = myrange.Top
       .Left = myrange.Left
     End With
   Exit Sub
erhand: MsgBox "キャンセルしました"
End Sub
e0080122_1646598.gif

上図のようなダイアログが表示されるので、任意の場所をドラッグして取り込み場所などを入れる。
すると、ドラッグしたサイズと場所に写真が挿入される。
e0080122_16503951.gif

ただ、縦横の比率などは一切無視しているで妙な写真になることは確かだ。
他の人にとっては糞の役にも立ちそうにないが、目的のものが出来たのでよしとする。
[PR]
by slayer0210 | 2006-01-19 16:51 | マクロ

任意の数で写真を分割する

以前に写真を2分割するでも紹介したが、今回は縦横ともに任意の数で写真を分割してくれるマクロを。
例えば、縦2、横3で分割した場合は、下図のようになる。
e0080122_1372513.gif

細かなエラー処理などは施していないが、例により糞の役にも立ちそうにないマクロのためこのまま実行してみる。

Sub 分割()
 Dim 元図 As Object
 Dim 各々図 As Shape

 Dim i As Integer
 Dim j As Integer
 Dim num As Integer
 Dim myFname As String

 'Dim x As Integer, y As Integer
 Dim 元図幅 As Single, 元図高 As Single
 Dim 分割幅 As Single, 分割高 As Single

 Const 隙間 As Integer = 5
 Dim 横分割数 As Integer, 縦分割数 As Integer

  Call mySdel

  myFname = Application.GetOpenFilename(FileFilter:="すべての図(*.jpg),*.jpg")
  If myFname = "False" Then Exit Sub
   Set 元図 = ActiveSheet.Pictures.Insert(myFname)
     With 元図
       .Top = 5
       .Left = 5
     End With
  横分割数 = Application.InputBox("横何分割?", "0以外の数値を入力")
  縦分割数 = Application.InputBox("縦何分割?", "0以外の数値を入力")

  元図幅 = 元図.Width
  元図高 = 元図.Height
  分割幅 = 元図幅 / 横分割数
  分割高 = 元図高 / 縦分割数
    元図.Copy
    num = 1

  For i = 1 To 縦分割数
    For j = 1 To 横分割数
      ActiveSheet.Paste
       Selection.Name = "各々図" & num
      With ActiveSheet.Shapes("各々図" & num)
        .Top = 隙間 * i
        .Left = 隙間 * j
        With .PictureFormat
          .CropTop = 分割高 * (i - 1)
          .CropBottom = 分割高 * (縦分割数 - i)
          .CropLeft = 分割幅 * (j - 1)
          .CropRight = 分割幅 * (横分割数 - j)
        End With
     End With
       num = num + 1
    Next
  Next
      元図.Delete
End Sub
上記の構文中に出てくるサブルーチンはあえてここで書く必要もないと思ったので、書かなかった。
また縦、横ともに10ぐらいの数値は大丈夫だがそれ以上になると処理に時間がかかってエクセルが止まってしまう場合がある。
しかし、目的のものが出来たのでよしとする。
[PR]
by slayer0210 | 2006-01-13 13:25 | マクロ

写真を2分割する

以前にトリミングもどきでも紹介したが、今回はシートに写真を挿入し、その写真を2分割してみた。
e0080122_8345186.gif

コード的にはベタベタでもっとスッキリさせる必要もあるが・・・。あまり糞の役にも立ちそうにないのでこのままで実行させた。

Sub 分割()
 Dim mypic As Object, mypic1 As Shape, mypic2 As Shape
 Dim picW As Single, picBW As Single
 Dim myFname As String
  myFname = Application.GetOpenFilename(FileFilter:="すべての図(*.jpg),*.jpg")

   If myFname = "False" Then Exit Sub

   Set mypic = ActiveSheet.Pictures.Insert(myFname)

     picW = mypic.Width
     picBW = mypic.Width / 2

  mypic.Copy
  ActiveSheet.Paste
  Selection.Name = "mypic1"
    Set mypic1 = ActiveSheet.Shapes("mypic1")
     With mypic1.PictureFormat
       .CropRight = picBW
     End With

     With mypic1
       .Top = 20
       .Left = 20
       .IncrementRotation 350
     End With

  ActiveSheet.Paste
  Selection.Name = "mypic2"
    Set mypic2 = ActiveSheet.Shapes("mypic2")
     With mypic2.PictureFormat
       .CropLeft = picBW
     End With

    With mypic2
       .Top = 20
       .Left = 20 + picBW + 10
       .IncrementRotation 10
    End With
      mypic.Delete
    ActiveSheet.Shapes.Range(Array("mypic1", "mypic2")).Group
End Sub

こうしてみると、Withをネストすればよかったが・・・かなりメチャクチャだ。
しかし目的のものが出来たのでよしとする。
e0080122_849619.gif

[PR]
by slayer0210 | 2006-01-12 08:49 | マクロ

シート名の一部を入力すると選択する

シート数が増えてくると、目的のシートを見つけるのが面倒になってくる。
またシート名の一部さえ覚えていれば、そのシートをアクティブにしてくれるマクロを。
e0080122_21405330.gif

Sub シート選択()
 Dim myS As Worksheet
 Dim myF As Boolean
 Dim mystr As String

 myF = True
 mystr = Application.InputBox("シート名の一部を入力して下さい")

  For Each myS In Worksheets
    If myS.Name Like "*" & mystr & "*" Then
      myS.Select (myF)
      myF = False
    End If
 Next
End Sub

また、これは1枚のシートのみならず、該当するシートをすべて選択することができるので
ある意味便利かもしれないが・・・わずらわしいとも・・・微妙だが。

例えば、シート名の中に同一の言葉を含むシートはすべて選択される(下図)
これは『』と入力した際に選択されたシートだ。
e0080122_21453892.gif

[PR]
by slayer0210 | 2006-01-11 21:47 | マクロ

動く文字列

一つのセルの中で動きながら表示される文字列を表現してみた。
街角でみかけるニュースなどの看板みたいなイメージだが・・・

Sub 動く文字列()
 Dim mystr As String
 Dim i As Integer
 Dim i2 As Integer
   mystr = "ニュースのような動く文字列。"

  For i = 1 To Len(mystr)
    With Range("a1")
      .Value = Left(mystr, i)
      .HorizontalAlignment = xlRight
    End With
     Application.Wait (Now() + TimeValue("00:00:01"))
  Next

  For i2 = 1 To Len(mystr)
    With Range("a1")
      .Value = Mid(mystr, i2 + 1, Len(mystr) - i2 + 1) & Left(mystr, i2)
    End With
     Application.Wait (Now() + TimeValue("00:00:01"))
  Next
End Sub
e0080122_10384353.gif

A1セルには予め背景色とフォントの色を設定しておいてから実行してみた。
ちょっと無理やりな気もするが目的のものが出来たのでよしとする。
[PR]
by slayer0210 | 2006-01-10 10:40 | マクロ

マウスを動かすとコンボボックスが選択

ユーザーフォーム上に配置したコンボボックスなどは通常は▼をクリックするとリストが表示される。
もしコンボボックスが何個も存在したら、いちいちクリックするのも面倒くさい。
e0080122_836228.gif


Private Sub ComboBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  ComboBox1.SetFocus
  ComboBox1.DropDown
End Sub

目的のコンボボックスに上記のようなイベントマクロを記述すればよいようだ。
DropDown メソッドは、コンボ ボックスのリストを下に表示させる場合に使用する。
上図ではテキストボックスも自動的にSetFocusするようにしてみた。
Private Sub TextBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  TextBox1.SetFocus
End Sub

SetFocusするとテキストボックス内にカーソルが表示され、即入力できる状態になる。
[PR]
by slayer0210 | 2006-01-10 08:49 | マクロ