011.or可以用数组应用?
有一个工作表,数据上万行,其中一列是我要分析的数值,数值比如为:0111,0112,0113,0114,0115,0116,0117中的任何一个。我要统计除0111,0113,0115之外的数据。公式:{sum(if(or(sheet!A2:A1111="0111",sheet!a2:a1111="0113",sheet!a2:a1111="0115"),1,0))},可是统计数字和我筛选相加的不一样,用if层层选,可以。请问原因?
解答:数组公式中用*、+代替AND、OR
{sum(if((sheet!A2:A1111="0111")+(sheet!a2:a1111="0113")+(sheet!a2:a1111="0115"),1,0))}
012.countif表达式的格式
请问:我想找A1:A15中,值不为空的数目,用countif命令怎么写呢?
解答1:应为counta(a1:a15)。countif为找a1:a15中,特定值的数目。
解答2:=ROWS(A1:A15)*COLUMNS(A1:A15)-COUNTIF(A1:A15,"")
=ROWS(A1:A15)*COLUMNS(A1:A15)-COUNTBLANK(A1:A15)
解答3:直接用count(a1:a15)不是更好吗!
013.删除字符串中某个字符的函数是什么?删除字符串中某个字符的函数是什么?
举例:字符串“i love you a!"想删除a字面,应该用什么函数实现?还有就是在字符串中某个位置加入某个字符用什么函数呢?
解答:如果有一定的规律,可以用Replace函数。例如:在A1单元格已有的字符串”123467"中加入个5变为“1234567”。可以这样做:=replace(a1,5,,"5")
另一方法:用CONCATENATE函数。
例如:a5单元格里的数据是“asdfhjkl",在另外的单元格了输入下面的函数
CONCATENATE(LEFT(A5,4),"l",RIGHT(A5,4)),得到的结果就是”asdflhjkl",然后用“选择性粘贴,粘贴数值”粘贴回a5单元格就可以了。
014.两表合一实例
问题提出:怎样把两个表(有相同的字段)怎样合并成一个表?
思路:用CountIf()函数对表1进行判断,如果其值为0,则表示没以重复,再将表2中和表1不重复的数据复制到表1中,从而实现两表合一。
解题的方法:
Sub dd()
b = Sheets(2).[a1].CurrentRegion.Rows.Count + 1
‘判断表2的行数
For i = 3 To b
a = Sheets(1).[a1].CurrentRegion.Rows.Count + 1
‘判断表1的行数
c = Sheets(2).[a1].CurrentRegion.Columns.Count
‘判断表2的列数
If Application.WorksheetFunction.CountIf(Sheets(1).[b1:b1000], Sheets(2).Cells(i, 2)) = 0 Then
Sheets(2).Range(Sheets(2).Cells(i, 1), Sheets(2).Cells(i, c)).Copy Sheets(1).Cells(a, 1)
‘将表2中与表1不重复的数据复制到表1中
End If
Next
End Sub
015.有没有办法把加载宏内置到Excel文件里?
因为用了 Networkdays 函数,用到了分析工具库,但是还要发给别人,怎么办?
解答:试试在"Thisworkbook"中写如下语句:
Private Sub Workbook_Open()
Application.RegisterXLL Filename:= _
"Office安装路径\Office\Library\Analysis\ANALYS32.XLL"
End Sub
又问:Office安装路径怎么写呀?大家不一定都装在C盘上。
解答:试试:Application.Path & "\Library\Analysis\ANALYS32.XLL"
046.如何在userform上显示最大化与最小化按钮
解答:
利用API
Option Explicit
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Const GWL_STYLE = (-16)
Private Const WS_THICKFRAME As Long = &H40000 '(恢复大小)
Private Const WS_MINIMIZEBOX As Long = &H20000 '(最小化)
Private Const WS_MAXIMIZEBOX As Long = &H10000 '(最大化)
Private Sub UserForm_Initialize()
Dim hWndForm As Long
Dim IStyle As Long
hWndForm = FindWindow("ThunderDFrame", Me.Caption)
IStyle = GetWindowLong(hWndForm, GWL_STYLE)
IStyle = IStyle Or WS_THICKFRAME '还原
IStyle = IStyle Or WS_MINIMIZEBOX '最小化
IStyle = IStyle Or WS_MAXIMIZEBOX '最大化
SetWindowLong hWndForm, GWL_STYLE, IStyle
End Sub
017.这个判断代码怎么写
在A列输入日期,如果所输入日期为1月1日或5月1日则B列相关单元格+1,其他日期+0,这要用到什么函数?代码怎么写?谢谢!
解答:用IF函数或用Worksheet_Change事件
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
If IsDate(Target) Then
If (Month(Target) = 1 And Day(Target) = 1) Or (Month(Target) = 5 And Day(Target) = 1) Then
Target.Offset(0, 1) = Target.Offset(0, 1) + 1
End If
End If
End If
End Sub
018.这个汇总表拆分程序怎么写,高手帮忙!
要将总表里的数据按工作单位字段拆分成数个分表(每个单位一张表格,标签名字为工作单位)这个程序怎么编写,请高手指点。如果记录增多或字段增多(但拆分字段不增)这个程序又应该怎样改写,请高手稍微讲解一下,应为我不是为这一个表,还想用到别的工作表中,谢谢!
解答:Sub Add_data(sht_Name) '找出要取资料的区域
Dim i As Integer, j As Integer, row_d As Integer
Dim First_row As Integer, Last_row As Integer
On Error Resume Next
With Sheets("总表")
i = 1
Do Until .Cells(i, 3).value = sht_Name
i = i + 1
Loop
First_row = i
j = First_row
Do Until .Cells(j, 3) <> sht_Name
j = j + 1
Loop
Last_row = j - 1
End With
Sheets("总表").Range(Cells(First_row, 1), Cells(Last_row, 12)).Select
Selection.Copy
Sheets(sht_Name).Select
Range("A2").Select
ActiveSheet.Paste
With ActiveSheet
row_d = .Range("A2").End(xlDown).Row + 1
Range("B" & row_d).value = "合计"
For i = 5 To 11
Cells(row_d, i).value = Application.WorksheetFunction.Sum(Range(Cells(2, i), Cells(row_d - 1, i)))
Next i
End With
Sheets("总表").Activate
Range("A2").Select
End Sub
020.这个公式应该怎么写?
我想统计所有物料编码的第一个字符为a的库存数量的总和,这个公式应该怎么写?A列为物料编码,B列为库存数量。
解答:=SUMIF($A:$A,"a*",$B:$B)
